| Viewing file:  ioc3.h (7.88 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
/** Copyright (C) 2005 Silicon Graphics, Inc.
 */
 #ifndef IA64_SN_IOC3_H
 #define IA64_SN_IOC3_H
 
 /* serial port register map */
 struct ioc3_serialregs {
 uint32_t sscr;
 uint32_t stpir;
 uint32_t stcir;
 uint32_t srpir;
 uint32_t srcir;
 uint32_t srtr;
 uint32_t shadow;
 };
 
 /* SUPERIO uart register map */
 struct ioc3_uartregs {
 char iu_lcr;
 union {
 char iir;    /* read only */
 char fcr;    /* write only */
 } u3;
 union {
 char ier;    /* DLAB == 0 */
 char dlm;    /* DLAB == 1 */
 } u2;
 union {
 char rbr;    /* read only, DLAB == 0 */
 char thr;    /* write only, DLAB == 0 */
 char dll;    /* DLAB == 1 */
 } u1;
 char iu_scr;
 char iu_msr;
 char iu_lsr;
 char iu_mcr;
 };
 
 #define iu_rbr u1.rbr
 #define iu_thr u1.thr
 #define iu_dll u1.dll
 #define iu_ier u2.ier
 #define iu_dlm u2.dlm
 #define iu_iir u3.iir
 #define iu_fcr u3.fcr
 
 struct ioc3_sioregs {
 char fill[0x170];
 struct ioc3_uartregs uartb;
 struct ioc3_uartregs uarta;
 };
 
 /* PCI IO/mem space register map */
 struct ioc3 {
 uint32_t pci_id;
 uint32_t pci_scr;
 uint32_t pci_rev;
 uint32_t pci_lat;
 uint32_t pci_addr;
 uint32_t pci_err_addr_l;
 uint32_t pci_err_addr_h;
 
 uint32_t sio_ir;
 /* these registers are read-only for general kernel code. To
 * modify them use the functions in ioc3.c
 */
 uint32_t sio_ies;
 uint32_t sio_iec;
 uint32_t sio_cr;
 uint32_t int_out;
 uint32_t mcr;
 uint32_t gpcr_s;
 uint32_t gpcr_c;
 uint32_t gpdr;
 uint32_t gppr[9];
 char fill[0x4c];
 
 /* serial port registers */
 uint32_t sbbr_h;
 uint32_t sbbr_l;
 
 struct ioc3_serialregs port_a;
 struct ioc3_serialregs port_b;
 char fill1[0x1ff10];
 /* superio registers */
 struct ioc3_sioregs sregs;
 };
 
 /* These don't exist on the ioc3 serial card... */
 #define eier    fill1[8]
 #define eisr    fill1[4]
 
 #define PCI_LAT            0xc    /* Latency Timer */
 #define PCI_SCR_DROP_MODE_EN    0x00008000 /* drop pios on parity err */
 #define UARTA_BASE        0x178
 #define UARTB_BASE        0x170
 
 
 /* bitmasks for serial RX status byte */
 #define RXSB_OVERRUN        0x01    /* char(s) lost */
 #define RXSB_PAR_ERR        0x02    /* parity error */
 #define RXSB_FRAME_ERR        0x04    /* framing error */
 #define RXSB_BREAK        0x08    /* break character */
 #define RXSB_CTS        0x10    /* state of CTS */
 #define RXSB_DCD        0x20    /* state of DCD */
 #define RXSB_MODEM_VALID    0x40    /* DCD, CTS and OVERRUN are valid */
 #define RXSB_DATA_VALID        0x80    /* FRAME_ERR PAR_ERR & BREAK valid */
 
 /* bitmasks for serial TX control byte */
 #define TXCB_INT_WHEN_DONE    0x20    /* interrupt after this byte is sent */
 #define TXCB_INVALID        0x00    /* byte is invalid */
 #define TXCB_VALID        0x40    /* byte is valid */
 #define TXCB_MCR        0x80    /* data<7:0> to modem cntrl register */
 #define TXCB_DELAY        0xc0    /* delay data<7:0> mSec */
 
 /* bitmasks for SBBR_L */
 #define SBBR_L_SIZE        0x00000001    /* 0 1KB rings, 1 4KB rings */
 
 /* bitmasks for SSCR_<A:B> */
 #define SSCR_RX_THRESHOLD    0x000001ff    /* hiwater mark */
 #define SSCR_TX_TIMER_BUSY    0x00010000    /* TX timer in progress */
 #define SSCR_HFC_EN        0x00020000    /* h/w flow cntrl enabled */
 #define SSCR_RX_RING_DCD    0x00040000    /* postRX record on delta-DCD */
 #define SSCR_RX_RING_CTS    0x00080000    /* postRX record on delta-CTS */
 #define SSCR_HIGH_SPD        0x00100000    /* 4X speed */
 #define SSCR_DIAG        0x00200000    /* bypass clock divider */
 #define SSCR_RX_DRAIN        0x08000000    /* drain RX buffer to memory */
 #define SSCR_DMA_EN        0x10000000    /* enable ring buffer DMA */
 #define SSCR_DMA_PAUSE        0x20000000    /* pause DMA */
 #define SSCR_PAUSE_STATE    0x40000000    /* set when PAUSE takes effect*/
 #define SSCR_RESET        0x80000000    /* reset DMA channels */
 
 /* all producer/comsumer pointers are the same bitfield */
 #define PROD_CONS_PTR_4K    0x00000ff8    /* for 4K buffers */
 #define PROD_CONS_PTR_1K    0x000003f8    /* for 1K buffers */
 #define PROD_CONS_PTR_OFF    3
 
 /* bitmasks for SRCIR_<A:B> */
 #define SRCIR_ARM        0x80000000    /* arm RX timer */
 
 /* bitmasks for SHADOW_<A:B> */
 #define SHADOW_DR        0x00000001    /* data ready */
 #define SHADOW_OE        0x00000002    /* overrun error */
 #define SHADOW_PE        0x00000004    /* parity error */
 #define SHADOW_FE        0x00000008    /* framing error */
 #define SHADOW_BI        0x00000010    /* break interrupt */
 #define SHADOW_THRE        0x00000020    /* transmit holding reg empty */
 #define SHADOW_TEMT        0x00000040    /* transmit shift reg empty */
 #define SHADOW_RFCE        0x00000080    /* char in RX fifo has error */
 #define SHADOW_DCTS        0x00010000    /* delta clear to send */
 #define SHADOW_DDCD        0x00080000    /* delta data carrier detect */
 #define SHADOW_CTS        0x00100000    /* clear to send */
 #define SHADOW_DCD        0x00800000    /* data carrier detect */
 #define SHADOW_DTR        0x01000000    /* data terminal ready */
 #define SHADOW_RTS        0x02000000    /* request to send */
 #define SHADOW_OUT1        0x04000000    /* 16550 OUT1 bit */
 #define SHADOW_OUT2        0x08000000    /* 16550 OUT2 bit */
 #define SHADOW_LOOP        0x10000000    /* loopback enabled */
 
 /* bitmasks for SRTR_<A:B> */
 #define SRTR_CNT        0x00000fff    /* reload value for RX timer */
 #define SRTR_CNT_VAL        0x0fff0000    /* current value of RX timer */
 #define SRTR_CNT_VAL_SHIFT    16
 #define SRTR_HZ            16000        /* SRTR clock frequency */
 
 /* bitmasks for SIO_IR, SIO_IEC and SIO_IES  */
 #define SIO_IR_SA_TX_MT        0x00000001    /* Serial port A TX empty */
 #define SIO_IR_SA_RX_FULL    0x00000002    /* port A RX buf full */
 #define SIO_IR_SA_RX_HIGH    0x00000004    /* port A RX hiwat */
 #define SIO_IR_SA_RX_TIMER    0x00000008    /* port A RX timeout */
 #define SIO_IR_SA_DELTA_DCD    0x00000010    /* port A delta DCD */
 #define SIO_IR_SA_DELTA_CTS    0x00000020    /* port A delta CTS */
 #define SIO_IR_SA_INT        0x00000040    /* port A pass-thru intr */
 #define SIO_IR_SA_TX_EXPLICIT    0x00000080    /* port A explicit TX thru */
 #define SIO_IR_SA_MEMERR    0x00000100    /* port A PCI error */
 #define SIO_IR_SB_TX_MT        0x00000200
 #define SIO_IR_SB_RX_FULL    0x00000400
 #define SIO_IR_SB_RX_HIGH    0x00000800
 #define SIO_IR_SB_RX_TIMER    0x00001000
 #define SIO_IR_SB_DELTA_DCD    0x00002000
 #define SIO_IR_SB_DELTA_CTS    0x00004000
 #define SIO_IR_SB_INT        0x00008000
 #define SIO_IR_SB_TX_EXPLICIT    0x00010000
 #define SIO_IR_SB_MEMERR    0x00020000
 #define SIO_IR_PP_INT        0x00040000    /* P port pass-thru intr */
 #define SIO_IR_PP_INTA        0x00080000    /* PP context A thru */
 #define SIO_IR_PP_INTB        0x00100000    /* PP context B thru */
 #define SIO_IR_PP_MEMERR    0x00200000    /* PP PCI error */
 #define SIO_IR_KBD_INT        0x00400000    /* kbd/mouse intr */
 #define SIO_IR_RT_INT        0x08000000    /* RT output pulse */
 #define SIO_IR_GEN_INT1        0x10000000    /* RT input pulse */
 #define SIO_IR_GEN_INT_SHIFT    28
 
 /* per device interrupt masks */
 #define SIO_IR_SA        (SIO_IR_SA_TX_MT | \
 SIO_IR_SA_RX_FULL | \
 SIO_IR_SA_RX_HIGH | \
 SIO_IR_SA_RX_TIMER | \
 SIO_IR_SA_DELTA_DCD | \
 SIO_IR_SA_DELTA_CTS | \
 SIO_IR_SA_INT | \
 SIO_IR_SA_TX_EXPLICIT | \
 SIO_IR_SA_MEMERR)
 
 #define SIO_IR_SB        (SIO_IR_SB_TX_MT | \
 SIO_IR_SB_RX_FULL | \
 SIO_IR_SB_RX_HIGH | \
 SIO_IR_SB_RX_TIMER | \
 SIO_IR_SB_DELTA_DCD | \
 SIO_IR_SB_DELTA_CTS | \
 SIO_IR_SB_INT | \
 SIO_IR_SB_TX_EXPLICIT | \
 SIO_IR_SB_MEMERR)
 
 #define SIO_IR_PP        (SIO_IR_PP_INT | SIO_IR_PP_INTA | \
 SIO_IR_PP_INTB | SIO_IR_PP_MEMERR)
 #define SIO_IR_RT        (SIO_IR_RT_INT | SIO_IR_GEN_INT1)
 
 /* bitmasks for SIO_CR */
 #define SIO_CR_CMD_PULSE_SHIFT 15
 #define SIO_CR_SER_A_BASE_SHIFT 1
 #define SIO_CR_SER_B_BASE_SHIFT 8
 #define SIO_CR_ARB_DIAG        0x00380000    /* cur !enet PCI requet (ro) */
 #define SIO_CR_ARB_DIAG_TXA    0x00000000
 #define SIO_CR_ARB_DIAG_RXA    0x00080000
 #define SIO_CR_ARB_DIAG_TXB    0x00100000
 #define SIO_CR_ARB_DIAG_RXB    0x00180000
 #define SIO_CR_ARB_DIAG_PP    0x00200000
 #define SIO_CR_ARB_DIAG_IDLE    0x00400000    /* 0 -> active request (ro) */
 
 /* defs for some of the generic I/O pins */
 #define GPCR_PHY_RESET        0x20    /* pin is output to PHY reset */
 #define GPCR_UARTB_MODESEL    0x40    /* pin is output to port B mode sel */
 #define GPCR_UARTA_MODESEL    0x80    /* pin is output to port A mode sel */
 
 #define GPPR_PHY_RESET_PIN    5    /* GIO pin controlling phy reset */
 #define GPPR_UARTB_MODESEL_PIN    6    /* GIO pin cntrling uartb modeselect */
 #define GPPR_UARTA_MODESEL_PIN    7    /* GIO pin cntrling uarta modeselect */
 
 #endif /* IA64_SN_IOC3_H */
 
 |