[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     ! 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