From: John Hodge Date: Tue, 1 Oct 2013 07:45:46 +0000 (+0800) Subject: Modules/UDI - Fixing physio gaps, added NIC binding X-Git-Tag: rel0.15~161 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=cfc191d2b10c69eada62608e0a088719fe7e4b1f;p=tpg%2Facess2.git Modules/UDI - Fixing physio gaps, added NIC binding --- diff --git a/KernelLand/Modules/Interfaces/UDI/include/physio/pci.h b/KernelLand/Modules/Interfaces/UDI/include/physio/pci.h new file mode 100644 index 00000000..44496d61 --- /dev/null +++ b/KernelLand/Modules/Interfaces/UDI/include/physio/pci.h @@ -0,0 +1,15 @@ +/* + */ +#ifndef _UDI_PHYSIO_PCI_H_ +#define _UDI_PHYSIO_PCI_H_ + +#define UDI_PCI_CONFIG_SPACE 255 +#define UDI_PCI_BAR_0 0 +#define UDI_PCI_BAR_1 1 +#define UDI_PCI_BAR_2 2 +#define UDI_PCI_BAR_3 3 +#define UDI_PCI_BAR_4 4 +#define UDI_PCI_BAR_5 5 + +#endif + diff --git a/KernelLand/Modules/Interfaces/UDI/include/physio/pio.h b/KernelLand/Modules/Interfaces/UDI/include/physio/pio.h index cbb054bb..aabc97f8 100644 --- a/KernelLand/Modules/Interfaces/UDI/include/physio/pio.h +++ b/KernelLand/Modules/Interfaces/UDI/include/physio/pio.h @@ -29,6 +29,77 @@ enum { UDI_PIO_16BYTE, UDI_PIO_32BYTE, }; +/** + * \brief Register numbers in pio_op + */ +enum { + UDI_PIO_R0, + UDI_PIO_R1, + UDI_PIO_R2, + UDI_PIO_R3, + UDI_PIO_R4, + UDI_PIO_R5, + UDI_PIO_R6, + UDI_PIO_R7, +}; +// Addressing modes +#define UDI_PIO_DIRECT 0x00 +#define UDI_PIO_SCRATCH 0x08 +#define UDI_PIO_BUF 0x10 +#define UDI_PIO_MEM 0x18 +// Class A opcodes +#define UDI_PIO_IN 0x00 +#define UDI_PIO_OUT 0x20 +#define UDI_PIO_LOAD 0x40 +#define UDI_PIO_STORE 0x60 +// Class B opcodes +#define UDI_PIO_LOAD_IMM 0x80 +#define UDI_PIO_CSKIP 0x88 +#define UDI_PIO_IN_IND 0x90 +#define UDI_PIO_OUT_IND 0x98 +#define UDI_PIO_SHIFT_LEFT 0xA0 +#define UDI_PIO_SHIFT_RIGHT 0xA8 +#define UDI_PIO_AND 0xB0 +#define UDI_PIO_AND_IMM 0xB8 +#define UDI_PIO_OR 0xC0 +#define UDI_PIO_OR_IMM 0xC8 +#define UDI_PIO_XOR 0xD0 +#define UDI_PIO_ADD 0xD8 +#define UDI_PIO_ADD_IMM 0xE0 +#define UDI_PIO_SUB 0xE8 +// Class C opcodes +#define UDI_PIO_BRANCH 0xF0 +#define UDI_PIO_LABEL 0xF1 +#define UDI_PIO_REP_IN_IND 0xF2 +#define UDI_PIO_REP_OUT_IND 0xF3 +#define UDI_PIO_DELAY 0xF4 +#define UDI_PIO_BARRIER 0xF5 +#define UDI_PIO_SYNC 0xF6 +#define UDI_PIO_SYNC_OUT 0xF7 +#define UDI_PIO_DEBUG 0xF8 +#define UDI_PIO_END 0xFE +#define UDI_PIO_END_IMM 0xFF +// Values for UDI_PIO_DEBUG's operand +#define UDI_PIO_TRACE_OPS_NONE 0 +#define UDI_PIO_TRACE_OPS1 1 +#define UDI_PIO_TRACE_OPS2 2 +#define UDI_PIO_TRACE_OPS3 3 +#define UDI_PIO_TRACE_REGS_NONE (0U<<2) +#define UDI_PIO_TRACE_REGS1 (1U<<2) +#define UDI_PIO_TRACE_REGS2 (2U<<2) +#define UDI_PIO_TRACE_REGS3 (3U<<2) +#define UDI_PIO_TRACE_DEV_NONE (0U<<4) +#define UDI_PIO_TRACE_DEV1 (1U<<4) +#define UDI_PIO_TRACE_DEV2 (2U<<4) +#define UDI_PIO_TRACE_DEV3 (3U<<4) +// Values for conditional operations +#define UDI_PIO_Z 0 // reg == 0 +#define UDI_PIO_NZ 1 // reg != 0 +#define UDI_PIO_NEG 2 // reg < 0 (signed) +#define UDI_PIO_NNEG 3 // reg >= 0 (signed) + +#define UDI_PIO_REP_ARGS(mode,mem_reg,mem_stride,pio_reg,pio_stride,cnt_reg) \ + ((mode)|(mem_reg)|((mem_stride)<<5)|((pio_reg)<<7)|((pio_stride)<<10)|((cnt_reg)<<13)) //! \brief PIO Handle Layout Element Type Code #define UDI_DL_PIO_HANDLE_T 200 @@ -82,16 +153,6 @@ extern void udi_pio_trans(udi_pio_trans_call_t *callback, udi_cb_t *gcb, typedef void udi_pio_probe_call_t(udi_cb_t *gcb, udi_status_t status); -/** - * \name Values for direction - * \{ - */ -#define UDI_PIO_IN 0x00 -#define UDI_PIO_OUT 0x20 -/** - * \} - */ - extern void udi_pio_probe(udi_pio_probe_call_t *callback, udi_cb_t *gcb, udi_pio_handle_t pio_handle, void *mem_ptr, udi_ubit32_t pio_offset, udi_ubit8_t tran_size, udi_ubit8_t direction); diff --git a/KernelLand/Modules/Interfaces/UDI/include/udi/arch/x86.h b/KernelLand/Modules/Interfaces/UDI/include/udi/arch/x86.h index 3018e8ab..4608aa36 100644 --- a/KernelLand/Modules/Interfaces/UDI/include/udi/arch/x86.h +++ b/KernelLand/Modules/Interfaces/UDI/include/udi/arch/x86.h @@ -10,7 +10,7 @@ typedef uint32_t udi_size_t; /* buffer size */ typedef udi_ubit8_t udi_index_t; /* zero-based index type */ typedef void *_udi_handle_t; -#define _NULL_HANDLE NULL +#define _NULL_HANDLE ((void*)0) /* Channel Handle */ typedef _udi_handle_t *udi_channel_t; diff --git a/KernelLand/Modules/Interfaces/UDI/include/udi_nic.h b/KernelLand/Modules/Interfaces/UDI/include/udi_nic.h new file mode 100644 index 00000000..169a81bf --- /dev/null +++ b/KernelLand/Modules/Interfaces/UDI/include/udi_nic.h @@ -0,0 +1,235 @@ +/* + * Acess2 UDI Environment (NIC Bindings) + * - By John Hodge (thePowersGang) + * + * udi_nic.h + * - NIC Bindings core + */ +#ifndef _UDI_NIC_H_ +#define _UDI_NIC_H_ + +// === CBs === +#define UDI_NIC_STD_CB_NUM 1 +#define UDI_NIC_BIND_CB_NUM 2 +#define UDI_NIC_CTRL_CB_NUM 3 +#define UDI_NIC_STATUS_CB_NUM 4 +#define UDI_NIC_INFO_CB_NUM 5 +#define UDI_NIC_TX_CB_NUM 6 +#define UDI_NIC_RX_CB_NUM 7 + +typedef struct { + udi_cb_t gcb; +} udi_nic_cb_t; + +#define UDI_NIC_MAC_ADDRESS_SIZE 20 +// Media type +#define UDI_NIC_ETHER 0 +#define UDI_NIC_TOKEN 1 +#define UDI_NIC_FASTETHER 2 +#define UDI_NIC_GIGETHER 3 +#define UDI_NIC_VGANYLAN 4 +#define UDI_NIC_FDDI 5 +#define UDI_NIC_ATM 6 +#define UDI_NIC_FC 7 +#define UDI_NIC_MISCMEDIA 0xff +// capabilities +#define UDI_NIC_CAP_TX_IP_CKSUM (1U<<0) +#define UDI_NIC_CAP_TX_TCP_CKSUM (1U<<1) +#define UDI_NIC_CAP_TX_UDP_CKSUM (1U<<2) +#define UDI_NIC_CAP_MCAST_LOOPBK (1U<<3) +#define UDI_NIC_CAP_BCAST_LOOPBK (1U<<4) +// capabilities (requests) +#define UDI_NIC_CAP_USE_TX_CKSUM (1U<<30) +#define UDI_NIC_CAP_USE_RX_CKSUM (1U<<31) +typedef struct { + udi_cb_t gcb; + udi_ubit8_t media_type; + udi_ubit32_t min_pdu_size; + udi_ubit32_t max_pdu_size; + udi_ubit32_t rx_hw_threshold; + udi_ubit32_t capabilities; + udi_ubit8_t max_perfect_multicast; + udi_ubit8_t max_total_multicast; + udi_ubit8_t mac_addr_len; + udi_ubit8_t mac_addr[UDI_NIC_MAC_ADDRESS_SIZE]; +} udi_nic_bind_cb_t; + +// commands +#define UDI_NIC_ADD_MULTI 1 +#define UDI_NIC_DEL_MULTI 2 +#define UDI_NIC_ALLMULTI_ON 3 +#define UDI_NIC_ALLMULTI_OFF 4 +#define UDI_NIC_GET_CURR_MAC 5 +#define UDI_NIC_SET_CURR_MAC 6 +#define UDI_NIC_GET_FACT_MAC 7 +#define UDI_NIC_PROMISC_ON 8 +#define UDI_NIC_PROMISC_OFF 9 +#define UDI_NIC_HW_RESET 10 +#define UDI_NIC_BAD_RXPKT 11 +typedef struct { + udi_cb_t gcb; + udi_ubit8_t command; + udi_ubit32_t indicator; + udi_buf_t *data_buf; +} udi_nic_ctrl_cb_t; + +// event +#define UDI_NIC_LINK_DOWN 0 +#define UDI_NIC_LINK_UP 1 +#define UDI_NIC_LINK_RESET 2 +typedef struct { + udi_cb_t gcb; + udi_ubit8_t event; +} udi_nic_status_cb_t; + +typedef struct { + udi_cb_t gcb; + udi_boolean_t interface_is_active; + udi_boolean_t link_is_active; + udi_boolean_t is_full_duplex; + udi_ubit32_t link_mbps; + udi_ubit32_t link_bps; + udi_ubit32_t tx_packets; + udi_ubit32_t rx_packets; + udi_ubit32_t tx_errors; + udi_ubit32_t rx_errors; + udi_ubit32_t tx_discards; + udi_ubit32_t rx_discards; + udi_ubit32_t tx_underrun; + udi_ubit32_t rx_overrun; + udi_ubit32_t collisions; +} udi_nic_info_cb_t; + +typedef struct udi_nic_tx_cb_s { + udi_cb_t gcb; + struct udi_nic_tx_cb_s *chain; + udi_buf_t *tx_buf; + udi_boolean_t completion_urgent; +} udi_nic_tx_cb_t; + +// rx_status +#define UDI_NIC_RX_BADCKSUM (1U<<0) +#define UDI_NIC_RX_UNDERRUN (1U<<1) +#define UDI_NIC_RX_OVERRUN (1U<<2) +#define UDI_NIC_RX_DRIBBLE (1U<<3) +#define UDI_NIC_RX_FRAME_ERR (1U<<4) +#define UDI_NIC_RX_MAC_ERR (1U<<5) +#define UDI_NIC_RX_OTHER_ERR (1U<<7) +// addr_match +#define UDI_NIC_RX_UNKNOWN 0 +#define UDI_NIC_RX_EXACT 1 +#define UDI_NIC_RX_HASH 2 +#define UDI_NIC_RX_BROADCAST 3 +// rx_valid +#define UDI_NIC_RX_GOOD_IP_CKSUM (1U<<0) +#define UDI_NIC_RX_GOOD_TCP_CKSUM (1U<<1) +#define UDI_NIC_RX_GOOD_UDP_CKSUM (1U<<2) +typedef struct udi_nic_rx_cb_s { + udi_cb_t gcb; + struct udi_nic_rx_cb_s *chain; + udi_buf_t *rx_buf; + udi_ubit8_t rx_status; + udi_ubit8_t addr_match; + udi_ubit8_t rx_valid; +} udi_nic_rx_cb_t; + +// === Function Types === +// - Control +typedef void udi_nd_bind_req_op_t(udi_nic_bind_cb_t *cb, udi_index_t tx_chan_index, udi_index_t rx_chan_index); +typedef void udi_nsr_bind_ack_op_t(udi_nic_bind_cb_t *cb, udi_status_t status); +typedef void udi_nd_unbind_req_op_t(udi_nic_cb_t *cb); +typedef void udi_nsr_unbind_ack_op_t(udi_nic_cb_t *cb, udi_status_t status); +typedef void udi_nd_enable_req_op_t(udi_nic_cb_t *cb); +typedef void udi_nsr_enable_ack_op_t(udi_nic_cb_t *cb, udi_status_t status); +typedef void udi_nd_disable_req_op_t(udi_nic_cb_t *cb); +typedef void udi_nsr_disable_ack_op_t(udi_nic_cb_t *cb, udi_status_t status); +typedef void udi_nd_ctrl_req_op_t(udi_nic_ctrl_cb_t *cb); +typedef void udi_nsr_ctrl_ack_op_t(udi_nic_ctrl_cb_t *cb, udi_status_t status); +typedef void udi_nsr_status_ind_op_t(udi_nic_status_cb_t *cb); +typedef void udi_nd_info_req_op_t(udi_nic_info_cb_t *cb, udi_boolean_t reset_statistics); +typedef void udi_nsr_info_ack_op_t(udi_nic_info_cb_t *cb); +// - TX +typedef void udi_nsr_tx_rdy_op_t(udi_nic_tx_cb_t *cb); +typedef void udi_nd_tx_req_op_t(udi_nic_tx_cb_t *cb); +typedef void udi_nd_exp_tx_req_op_t(udi_nic_tx_cb_t *cb); +// - RX +typedef void udi_nsr_rx_ind_op_t(udi_nic_rx_cb_t *cb); +typedef void udi_nsr_exp_rx_ind_op_t(udi_nic_rx_cb_t *cb); +typedef void udi_nd_rx_rdy_op_t(udi_nic_rx_cb_t *cb); + +// === Functions === +// - Control +extern udi_nd_bind_req_op_t udi_nd_bind_req; +extern udi_nsr_bind_ack_op_t udi_nsr_bind_ack; +extern udi_nd_unbind_req_op_t udi_nd_unbind_req; +extern udi_nsr_unbind_ack_op_t udi_nsr_unbind_ack; +extern udi_nd_enable_req_op_t udi_nd_enable_req; +extern udi_nsr_enable_ack_op_t udi_nsr_enable_ack; +extern udi_nd_disable_req_op_t udi_nd_disable_req; +extern udi_nsr_disable_ack_op_t udi_nsr_disable_ack; +extern udi_nd_ctrl_req_op_t udi_nd_ctrl_req; +extern udi_nsr_ctrl_ack_op_t udi_nsr_ctrl_ack; +extern udi_nsr_status_ind_op_t udi_nsr_status_ind; +extern udi_nd_info_req_op_t udi_nd_info_req; +extern udi_nsr_info_ack_op_t udi_nsr_info_ack; +// - TX +extern udi_nsr_tx_rdy_op_t udi_nsr_tx_rdy; +extern udi_nd_tx_req_op_t udi_nd_tx_req; +extern udi_nd_exp_tx_req_op_t udi_nd_exp_tx_req; +// - RX +extern udi_nsr_rx_ind_op_t udi_nsr_rx_ind; +extern udi_nsr_exp_rx_ind_op_t udi_nsr_exp_rx_ind; +extern udi_nd_rx_rdy_op_t udi_nd_rx_rdy; + +// === Op Lists == +#define UDI_ND_CTRL_OPS_NUM 1 +#define UDI_ND_TX_OPS_NUM 2 +#define UDI_ND_RX_OPS_NUM 3 +#define UDI_NSR_CTRL_OPS_NUM 4 +#define UDI_NSR_TX_OPS_NUM 5 +#define UDI_NSR_RX_OPS_NUM 6 + +typedef const struct { + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_nd_bind_req_op_t *nd_bind_req_op; + udi_nd_unbind_req_op_t *nd_unbind_req_op; + udi_nd_enable_req_op_t *nd_enable_req_op; + udi_nd_disable_req_op_t *nd_disable_req_op; + udi_nd_ctrl_req_op_t *nd_ctrl_req_op; + udi_nd_info_req_op_t *nd_info_req_op; +} udi_nd_ctrl_ops_t; + +typedef const struct { + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_nd_tx_req_op_t *nd_tx_req_op; + udi_nd_exp_tx_req_op_t *nd_exp_tx_req_op; +} udi_nd_tx_ops_t; + +typedef const struct { + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_nd_rx_rdy_op_t *nd_rx_rdy_op; +} udi_nd_rx_ops_t; + +typedef const struct { + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_nsr_bind_ack_op_t *nsr_bind_ack_op; + udi_nsr_unbind_ack_op_t *nsr_unbind_ack_op; + udi_nsr_enable_ack_op_t *nsr_enable_ack_op; + udi_nsr_ctrl_ack_op_t *nsr_ctrl_ack_op; + udi_nsr_info_ack_op_t *nsr_info_ack_op; + udi_nsr_status_ind_op_t *nsr_status_ind_op; +} udi_nsr_ctrl_ops_t; + +typedef const struct { + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_nsr_tx_rdy_op_t *nsr_tx_rdy_op; +} udi_nsr_tx_ops_t; + +typedef const struct { + udi_channel_event_ind_op_t *channel_event_ind_op; + udi_nsr_rx_ind_op_t *nsr_rx_ind_op; + udi_nsr_exp_rx_ind_op_t *nsr_exp_rx_ind_op; +} udi_nsr_rx_ops_t; + +#endif + diff --git a/KernelLand/Modules/Interfaces/UDI/include/udi_physio.h b/KernelLand/Modules/Interfaces/UDI/include/udi_physio.h index 84b684b8..74fd34c1 100644 --- a/KernelLand/Modules/Interfaces/UDI/include/udi_physio.h +++ b/KernelLand/Modules/Interfaces/UDI/include/udi_physio.h @@ -122,6 +122,8 @@ struct udi_scgth_s #include #include #include -#include +#include "physio/pio.h" + +#include "physio/pci.h" #endif