OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [net/] [llc_frame.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/* if_ether.h needed for definition of ETH_DATA_LEN and ETH_ALEN
2
 */
3
#include "linux/if_ether.h"
4
 
5
/* frame layout based on par3.2 "LLC PDU format"
6
 */
7
typedef union {                 /* pdu layout from pages 40 & 44 */
8
    struct {                    /* general header, all pdu types */
9
        unsigned dsap : 8;      /* dest service access point */
10
        unsigned ssap : 8;      /* source service access point */
11
        unsigned f1 : 1;        /* I- U- or S- format id bits */
12
        unsigned f2 : 1;
13
        unsigned : 6;
14
        unsigned : 8;
15
   } pdu_hdr;
16
   struct {
17
        char dummy1[2];         /* dsap + ssap */
18
        char byte1;
19
        char byte2;
20
   } pdu_cntl;                  /* unformatted control bytes */
21
   struct {                     /* header of an Information pdu */
22
        unsigned char dummy2[2];
23
        unsigned : 1;
24
        unsigned ns : 7;
25
        unsigned i_pflag : 1;   /* poll/final bit */
26
        unsigned nr : 7;        /* N(R)  */
27
        unsigned char is_info[ ETH_DATA_LEN ];
28
   }  i_hdr;
29
   struct {                     /* header of a Supervisory pdu */
30
        unsigned char dummy3[2];
31
        unsigned : 2;
32
        unsigned ss : 2;        /* supervisory function bits */
33
        unsigned : 4;
34
        unsigned s_pflag : 1;   /* poll/final bit  */
35
        unsigned nr : 7;        /* N(R)  */
36
   } s_hdr;
37
 
38
/* when accessing the P/F bit or the N(R) field there's no need to distinguish
39
   I pdus from S pdus i_pflag and s_pflag / i_nr and s_nr map to the same
40
   physical location.
41
 */
42
   struct {                     /* header of an Unnumbered pdu */
43
        unsigned char dummy4[2];
44
        unsigned : 2;
45
        unsigned mm1 : 2;       /* modifier function part1 */
46
        unsigned u_pflag : 1;    /* P/F for U- pdus */
47
        unsigned mm2 : 3;       /* modifier function part2 */
48
        unsigned char u_info[ ETH_DATA_LEN-1];
49
   } u_hdr;
50
   struct {                     /* mm field in an Unnumbered pdu */
51
        unsigned char dummy5[2];
52
        unsigned : 2;
53
        unsigned mm : 6;        /* must be masked to get ridd of P/F !  */
54
   } u_mm;
55
 
56
} frame_type, *frameptr;
57
 
58
/* frame format test macros: */
59
 
60
#define IS_UFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & ( (fr)->pdu_hdr.f2) )
61
 
62
#define IS_IFRAME( fr ) ( !( (fr)->pdu_hdr.f1) )
63
 
64
#define IS_SFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & !( (fr)->pdu_hdr.f2) )
65
 
66
#define IS_RSP( fr ) ( fr->pdu_hdr.ssap & 0x01 )
67
 
68
 
69
/* The transition table, the _encode tables and some tests in the
70
   source code depend on the numeric order of these values.
71
   Think twice before changing.
72
 */
73
 
74
/* frame names for TYPE 2 operation: */
75
#define I_CMD           0
76
#define RR_CMD          1
77
#define RNR_CMD         2
78
#define REJ_CMD         3
79
#define DISC_CMD        4
80
#define SABME_CMD       5
81
#define I_RSP           6
82
#define RR_RSP          7
83
#define RNR_RSP         8
84
#define REJ_RSP         9
85
#define UA_RSP          10
86
#define DM_RSP          11
87
#define FRMR_RSP        12
88
 
89
/* junk frame name: */
90
#define BAD_FRAME       13
91
#define NO_FRAME        13
92
 
93
/* frame names for TYPE 1 operation: */
94
#define UI_CMD          14
95
#define XID_CMD         15
96
#define TEST_CMD        16
97
#define XID_RSP         17
98
#define TEST_RSP        18

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.