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
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);
--- /dev/null
+/*
+ * 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
+