[BACK]Return to rlnvar.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/rlnvar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: rlnvar.h,v 1.7 2002/06/09 03:14:18 todd Exp $ */
                      2: /*
                      3:  * David Leonard <d@openbsd.org>, 1999. Public domain.
                      4:  *
                      5:  * Proxim RangeLAN2 soft state copy.
                      6:  */
                      7:
                      8: #include <sys/timeout.h>
                      9:
                     10: /*
                     11:  * Mailboxes are used to communicate card-initiated messages
                     12:  * from the interrupt handler to other kernel threads.
                     13:  */
                     14: struct rln_mbox {
                     15:        void *          mb_buf;         /* Message buffer */
                     16:        size_t          mb_len;         /* Message buffer size */
                     17:        size_t          mb_actlen;      /* Actual message size */
                     18:        u_int8_t        mb_state;       /* Mailbox state */
                     19: #define RLNMBOX_VOID           0
                     20: #define RLNMBOX_EMPTY          1
                     21: #define RLNMBOX_FILLING                2
                     22: #define RLNMBOX_FILLED         3
                     23: };
                     24:
                     25: #define RLN_NMBOX      0x7c                    /* Same as max msg seq number */
                     26:
                     27: /* Soft state */
                     28: struct rln_softc {
                     29:        struct          device sc_dev;
                     30:        void            *sc_ih;                 /* Interrupt handler */
                     31:        struct          arpcom sc_arpcom;       /* Ethernet common part */
                     32:        bus_space_tag_t sc_iot;                 /* Bus cookie */
                     33:        bus_space_handle_t sc_ioh;              /* Bus i/o handle */
                     34:        struct timeout  sc_timeout;
                     35:
                     36:        u_int8_t        sc_width;               /* Bus transfer width */
                     37:        u_int8_t        sc_irq;                 /* IRQ for card */
                     38:
                     39:        u_int16_t       sc_cardtype;            /* Set from config flags */
                     40: #define RLN_CTYPE_OEM          0x01
                     41: #define RLN_CTYPE_UISA         0x02
                     42: #define RLN_CTYPE_ONE_PIECE    0x04
                     43:
                     44:        u_int8_t        sc_intsel;              /* Copy of INTSEL */
                     45:        u_int8_t        sc_status;              /* Copy of STATUS */
                     46:        u_int8_t        sc_control;             /* Copy of CONTROL */
                     47: #ifdef RLNDEBUG_REG
                     48:        u_int16_t       dbg_oreg[8];            /* Last reg value written */
                     49: #endif
                     50:
                     51:        u_int8_t        sc_pktseq;              /* Card message seq no */
                     52:        u_int8_t        sc_txseq;               /* Tx packet seq no */
                     53:
                     54:        u_int16_t       sc_state;               /* Soft state. */
                     55: #define RLN_STATE_SYNC         0x0001  /* Card is synchronised */
                     56: #define RLN_STATE_NEEDINIT     0x0002  /* Card needs reset+init */
                     57: #define RLN_STATE_PROMISC      0x0004  /* Receive all packets */
                     58:
                     59:        struct          rln_mbox sc_mbox[0x80]; /* Per-message mailboxes */
                     60:        struct          rln_param sc_param;     /* User controlled parameters */
                     61: };
                     62:
                     63: #define rln_need_reset(sc) \
                     64:        (sc)->sc_state |= RLN_STATE_NEEDINIT
                     65:
                     66: /* Structure used to hold partial read state for rln_rx_pdata() */
                     67: struct rln_pdata {
                     68:        u_int8_t p_data;                /* extra data read but not consumed */
                     69:         int      p_nremain;            /* size of unconsumed data */
                     70: };
                     71: #define RLN_PDATA_INIT {0,0}
                     72:
                     73: /* Structure used to hold partial transmit state for rln_msg_tx_*() */
                     74: struct rln_msg_tx_state {
                     75:        int      ien;                   /* saved interrupt state */
                     76:        u_int8_t w;                     /* saved wakup state */
                     77:        struct rln_pdata pd;            /* saved partial write state */
                     78: };
                     79:
                     80: struct rln_mm_cmd;                     /* fwd decl */
                     81:
                     82: #define RLN_WAKEUP_SET         0xff
                     83: #define RLN_WAKEUP_NOCHANGE    (0x80|0x10)
                     84:
                     85: void           rlnconfig(struct rln_softc *);
                     86: int            rlnintr(void *);
                     87: void           rlninit(struct rln_softc *);
                     88: void           rlnstop(struct rln_softc *);
                     89: void           rlnread(struct rln_softc *, struct rln_mm_cmd *, int);
                     90: int            rln_enable(struct rln_softc *, int);
                     91: int            rln_reset(struct rln_softc *);
                     92: u_int8_t       rln_wakeup(struct rln_softc *, u_int8_t);
                     93: int            rln_rx_request(struct rln_softc *, int);
                     94: int            rln_rx_data(struct rln_softc *, void *, int);
                     95: void           rln_rx_pdata(struct rln_softc *, void *, int,
                     96:                        struct rln_pdata *);
                     97: void           rln_rx_end(struct rln_softc *);
                     98: void           rln_clear_nak(struct rln_softc *);
                     99: u_int8_t       rln_newseq(struct rln_softc *);
                    100:
                    101: void           rln_msg_tx_data(struct rln_softc *, void *, u_int16_t,
                    102:                        struct rln_msg_tx_state *);
                    103: int            rln_msg_tx_start(struct rln_softc *, void *, int,
                    104:                        struct rln_msg_tx_state *);
                    105: int            rln_msg_tx_end(struct rln_softc *,
                    106:                        struct rln_msg_tx_state *);
                    107: int            rln_msg_txrx(struct rln_softc *, void *, int,
                    108:                        void *, int);
                    109:
                    110: int            rln_mbox_create(struct rln_softc *, u_int8_t, void *,
                    111:                        size_t);
                    112: int            rln_mbox_wait(struct rln_softc *, u_int8_t, int);
                    113: int            rln_mbox_lock(struct rln_softc *, u_int8_t, void **,
                    114:                        size_t*);
                    115: void           rln_mbox_unlock(struct rln_softc *, u_int8_t, size_t);
                    116:
                    117: /* debug all card operations */
                    118: #ifdef RLNDEBUG
                    119: #define dprintf(fmt, args...) printf(fmt , ## args)
                    120:        /* log(LOG_DEBUG, fmt , ## args) */
                    121: #define dprinthex(buf, len)    do {                            \
                    122:        unsigned char *_b = (unsigned char *)(buf);             \
                    123:        int _i, _l=(len);                                       \
                    124:        printf("{");                                            \
                    125:        for(_i = 0; _i < _l; _i++) {                            \
                    126:                printf("%02x", _b[_i]);                         \
                    127:                if (_i % 4 == 3 && _i != _l - 1)                \
                    128:                        printf(",");                            \
                    129:        }                                                       \
                    130:        printf("}");                                            \
                    131: } while (0)
                    132: #else
                    133: #define dprintf(fmt, args...) /* nothing */
                    134: #define dprinthex(buf, len)    /* nothing */
                    135: #endif
                    136:
                    137: /* debug messages to/from card. prints 4-octet groups separated by commas */
                    138: #define RLNDUMP
                    139: #define RLNDUMPHEX(buf, buflen) do {                           \
                    140:        int _i;                                                 \
                    141:        for (_i = 0; _i < (buflen); _i++) {                     \
                    142:                printf("%02x", ((unsigned char *)(buf))[_i]);   \
                    143:                if (_i != (buflen) - 1 && _i % 4 == 3)          \
                    144:                        printf(",");                            \
                    145:        }                                                       \
                    146: } while (0)

CVSweb