iPXE
vxge_config.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ipxe/malloc.h>
#include <ipxe/pci.h>
#include <ipxe/iobuf.h>
#include <ipxe/ethernet.h>
#include <byteswap.h>
#include "vxge_traffic.h"
#include "vxge_config.h"
#include "vxge_main.h"

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_ONLY)
void vxge_hw_vpath_set_zero_rx_frm_len (struct __vxge_hw_device *hldev)
enum vxge_hw_status vxge_hw_set_fw_api (struct __vxge_hw_device *hldev, u64 vp_id, u32 action, u32 offset, u64 data0, u64 data1)
enum vxge_hw_status vxge_hw_get_func_mode (struct __vxge_hw_device *hldev, u32 *func_mode)
void __vxge_hw_device_pci_e_init (struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_device_register_poll (void __iomem *reg, u64 mask, u32 max_millis)
enum vxge_hw_status __vxge_hw_device_vpath_reset_in_prog_check (u64 __iomem *vpath_rst_in_prog)
static struct vxge_hw_legacy_reg __iomem__vxge_hw_device_get_legacy_reg (struct pci_device *pdev, void __iomem *bar0)
struct vxge_hw_toc_reg __iomem__vxge_hw_device_toc_get (void __iomem *bar0, struct vxge_hw_legacy_reg __iomem *legacy_reg)
enum vxge_hw_status __vxge_hw_device_reg_addr_get (struct __vxge_hw_device *hldev)
static u32 __vxge_hw_device_access_rights_get (u32 host_type, u32 func_id)
void __vxge_hw_device_host_info_get (struct __vxge_hw_device *hldev)
enum vxge_hw_status vxge_hw_device_hw_info_get (struct pci_device *pdev, void __iomem *bar0, struct vxge_hw_device_hw_info *hw_info)
 vxge_hw_device_hw_info_get - Get the hw information Returns the vpath mask that has the bits set for each vpath allocated for the driver, FW version information and the first mac addresse for each vpath
enum vxge_hw_status vxge_hw_device_initialize (struct __vxge_hw_device **devh, void *bar0, struct pci_device *pdev, u8 titan1)
void vxge_hw_device_terminate (struct __vxge_hw_device *hldev)
enum vxge_hw_status vxge_hw_ring_replenish (struct __vxge_hw_ring *ring)
enum vxge_hw_status __vxge_hw_ring_create (struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_ring *ring)
enum vxge_hw_status __vxge_hw_ring_delete (struct __vxge_hw_ring *ring)
enum vxge_hw_status __vxge_hw_legacy_swapper_set (struct vxge_hw_legacy_reg __iomem *legacy_reg)
enum vxge_hw_status __vxge_hw_vpath_swapper_set (struct vxge_hw_vpath_reg __iomem *vpath_reg)
enum vxge_hw_status __vxge_hw_kdfc_swapper_set (struct vxge_hw_legacy_reg __iomem *legacy_reg, struct vxge_hw_vpath_reg __iomem *vpath_reg)
enum vxge_hw_status vxge_hw_vpath_strip_fcs_check (struct __vxge_hw_device *hldev, u64 vpath_mask)
enum vxge_hw_status __vxge_hw_fifo_create (struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_fifo *fifo)
enum vxge_hw_status __vxge_hw_fifo_delete (struct __vxge_hw_fifo *fifo)
enum vxge_hw_status __vxge_hw_vpath_pci_read (struct __vxge_hw_virtualpath *vpath, u32 phy_func_0, u32 offset, u32 *val)
u32 __vxge_hw_vpath_func_id_get (struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg)
static void __vxge_hw_read_rts_ds (struct vxge_hw_vpath_reg __iomem *vpath_reg, u64 dta_struct_sel)
enum vxge_hw_status __vxge_hw_vpath_card_info_get (struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_fw_ver_get (struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_addr_get (struct vxge_hw_vpath_reg *vpath_reg, u8(macaddr)[ETH_ALEN], u8(macaddr_mask)[ETH_ALEN])
static enum vxge_hw_status __vxge_hw_vpath_mgmt_read (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_vpath_reset_check (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_vpath_reset (struct __vxge_hw_device *hldev, u32 vp_id)
void __vxge_hw_vpath_prc_configure (struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_vpath_kdfc_configure (struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_mac_configure (struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_vpath_tim_configure (struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_initialize (struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vp_initialize (struct __vxge_hw_device *hldev, u32 vp_id, struct __vxge_hw_virtualpath *vpath)
void __vxge_hw_vp_terminate (struct __vxge_hw_device *hldev, struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_mtu_set (struct __vxge_hw_virtualpath *vpath, u32 new_mtu)
enum vxge_hw_status vxge_hw_vpath_open (struct __vxge_hw_device *hldev, struct vxge_vpath *vpath)
void vxge_hw_vpath_rx_doorbell_init (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_close (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_reset (struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status vxge_hw_vpath_recover_from_reset (struct __vxge_hw_virtualpath *vpath)
void vxge_hw_vpath_enable (struct __vxge_hw_virtualpath *vpath)

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_ONLY )

◆ vxge_hw_vpath_set_zero_rx_frm_len()

void vxge_hw_vpath_set_zero_rx_frm_len ( struct __vxge_hw_device * hldev)

Definition at line 31 of file vxge_config.c.

32{
33 u64 val64;
34 struct __vxge_hw_virtualpath *vpath;
35 struct vxge_hw_vpath_reg __iomem *vp_reg;
36
37 vpath = &hldev->virtual_path;
38 vp_reg = vpath->vp_reg;
39
40 val64 = readq(&vp_reg->rxmac_vcfg0);
42 writeq(val64, &vp_reg->rxmac_vcfg0);
43 val64 = readq(&vp_reg->rxmac_vcfg0);
44 return;
45}
#define __iomem
Definition igbvf_osdep.h:46
#define readq(io_addr)
Definition io.h:234
#define writeq(data, io_addr)
Definition io.h:273
uint64_t u64
Definition stdint.h:26
struct __vxge_hw_virtualpath virtual_path
struct vxge_hw_vpath_reg * vp_reg
#define VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN(val)
Definition vxge_reg.h:4193

References __iomem, readq, vxge_hw_vpath_reg::rxmac_vcfg0, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN, and writeq.

Referenced by vxge_close().

◆ vxge_hw_set_fw_api()

enum vxge_hw_status vxge_hw_set_fw_api ( struct __vxge_hw_device * hldev,
u64 vp_id,
u32 action,
u32 offset,
u64 data0,
u64 data1 )

Definition at line 48 of file vxge_config.c.

54{
56 u64 val64;
58
59 struct vxge_hw_vpath_reg __iomem *vp_reg;
60
61 vp_reg = (struct vxge_hw_vpath_reg __iomem *)hldev->vpath_reg[vp_id];
62
63 writeq(data0, &vp_reg->rts_access_steer_data0);
64 writeq(data1, &vp_reg->rts_access_steer_data1);
65
66 wmb();
67
72
73 writeq(val64, &vp_reg->rts_access_steer_ctrl);
74
75 wmb();
76
78 &vp_reg->rts_access_steer_ctrl,
82
83 if (status != VXGE_HW_OK)
84 return VXGE_HW_FAIL;
85
86 val64 = readq(&vp_reg->rts_access_steer_ctrl);
87
90 else
92
93 return status;
94}
u32 data1
Definition ar9003_mac.h:4
u32 data0
Definition ar9003_mac.h:2
uint16_t offset
Offset to command line.
Definition bzimage.h:3
uint8_t status
Status.
Definition ena.h:5
#define wmb()
Definition io.h:546
struct vxge_hw_vpath_reg * vpath_reg[VXGE_HW_TITAN_VPATH_REG_SPACES]
#define u32
Definition vga.h:21
enum vxge_hw_status __vxge_hw_device_register_poll(void __iomem *reg, u64 mask, u32 max_millis)
#define WAIT_FACTOR
Definition vxge_config.h:28
vxge_hw_status
Definition vxge_config.h:70
@ VXGE_HW_FAIL
Definition vxge_config.h:72
@ VXGE_HW_OK
Definition vxge_config.h:71
#define VXGE_HW_DEF_DEVICE_POLL_MILLIS
Definition vxge_config.h:67
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL(val)
Definition vxge_reg.h:4206
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET(val)
Definition vxge_reg.h:4211
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE
Definition vxge_reg.h:4207
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO
Definition vxge_reg.h:204
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS
Definition vxge_reg.h:4210
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION(val)
Definition vxge_reg.h:4205

References __iomem, __vxge_hw_device_register_poll(), data0, data1, offset, readq, vxge_hw_vpath_reg::rts_access_steer_ctrl, vxge_hw_vpath_reg::rts_access_steer_data0, vxge_hw_vpath_reg::rts_access_steer_data1, status, u32, __vxge_hw_device::vpath_reg, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, WAIT_FACTOR, wmb, and writeq.

Referenced by vxge_hw_get_func_mode().

◆ vxge_hw_get_func_mode()

enum vxge_hw_status vxge_hw_get_func_mode ( struct __vxge_hw_device * hldev,
u32 * func_mode )

Definition at line 98 of file vxge_config.c.

99{
101 struct vxge_hw_vpath_reg __iomem *vp_reg;
102 u64 val64;
103 int vp_id;
104
105 /* get the first vpath number assigned to this function */
106 vp_id = hldev->first_vp_id;
107
108 vp_reg = (struct vxge_hw_vpath_reg __iomem *)hldev->vpath_reg[vp_id];
109
110 status = vxge_hw_set_fw_api(hldev, vp_id,
112
113 if (status == VXGE_HW_OK) {
114 val64 = readq(&vp_reg->rts_access_steer_data0);
115 *func_mode = VXGE_HW_GET_FUNC_MODE_VAL(val64);
116 }
117
118 return status;
119}
enum vxge_hw_status vxge_hw_set_fw_api(struct __vxge_hw_device *hldev, u64 vp_id, u32 action, u32 offset, u64 data0, u64 data1)
Definition vxge_config.c:48
#define VXGE_HW_FW_API_GET_FUNC_MODE
Definition vxge_reg.h:65
#define VXGE_HW_GET_FUNC_MODE_VAL(val)
Definition vxge_reg.h:67

References __iomem, __vxge_hw_device::first_vp_id, readq, vxge_hw_vpath_reg::rts_access_steer_data0, status, u32, __vxge_hw_device::vpath_reg, VXGE_HW_FW_API_GET_FUNC_MODE, VXGE_HW_GET_FUNC_MODE_VAL, VXGE_HW_OK, and vxge_hw_set_fw_api().

Referenced by vxge_probe().

◆ __vxge_hw_device_pci_e_init()

void __vxge_hw_device_pci_e_init ( struct __vxge_hw_device * hldev)

Definition at line 127 of file vxge_config.c.

128{
129 u16 cmd = 0;
130 struct pci_device *pdev = hldev->pdev;
131
132 vxge_trace();
133
134 /* Set the PErr Repconse bit and SERR in PCI command register. */
136 cmd |= 0x140;
138
139 return;
140}
struct golan_eqe_cmd cmd
Definition CIB_PRM.h:1
int pci_read_config_word(struct pci_device *pci, unsigned int where, uint16_t *value)
Read 16-bit word from PCI configuration space.
int pci_write_config_word(struct pci_device *pci, unsigned int where, uint16_t value)
Write 16-bit word to PCI configuration space.
#define PCI_COMMAND
PCI command.
Definition pci.h:26
struct pci_device * pdev
A PCI device.
Definition pci.h:214
#define u16
Definition vga.h:20
#define vxge_trace()

References cmd, PCI_COMMAND, pci_read_config_word(), pci_write_config_word(), __vxge_hw_device::pdev, u16, and vxge_trace.

Referenced by vxge_hw_device_initialize().

◆ __vxge_hw_device_register_poll()

enum vxge_hw_status __vxge_hw_device_register_poll ( void __iomem * reg,
u64 mask,
u32 max_millis )

Definition at line 148 of file vxge_config.c.

149{
150 u64 val64;
151 u32 i = 0;
152 enum vxge_hw_status ret = VXGE_HW_FAIL;
153
154 udelay(10);
155
156 do {
157 val64 = readq(reg);
158 if (!(val64 & mask))
159 return VXGE_HW_OK;
160 udelay(100);
161 } while (++i <= 9);
162
163 i = 0;
164 do {
165 val64 = readq(reg);
166 if (!(val64 & mask))
167 return VXGE_HW_OK;
168 udelay(1000);
169 } while (++i <= max_millis);
170
171 return ret;
172}
static unsigned int unsigned int reg
Definition myson.h:162
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition timer.c:61

References __iomem, readq, reg, u32, udelay(), VXGE_HW_FAIL, and VXGE_HW_OK.

Referenced by __vxge_hw_device_vpath_reset_in_prog_check(), __vxge_hw_pio_mem_write64(), __vxge_hw_vpath_pci_read(), __vxge_hw_vpath_reset_check(), and vxge_hw_set_fw_api().

◆ __vxge_hw_device_vpath_reset_in_prog_check()

enum vxge_hw_status __vxge_hw_device_vpath_reset_in_prog_check ( u64 __iomem * vpath_rst_in_prog)

◆ __vxge_hw_device_get_legacy_reg()

struct vxge_hw_legacy_reg __iomem * __vxge_hw_device_get_legacy_reg ( struct pci_device * pdev,
void __iomem * bar0 )
static

Definition at line 197 of file vxge_config.c.

198{
200 struct vxge_hw_legacy_reg __iomem *legacy_reg;
201 /*
202 * If the length of Bar0 is 16MB, then assume that we are configured
203 * in MF8P_VP2 mode and then add 8MB to the legacy_reg offsets
204 */
205 if (pci_bar_size(pdev, PCI_BASE_ADDRESS_0) == 0x1000000)
206 legacy_reg = (struct vxge_hw_legacy_reg __iomem *)
207 (bar0 + 0x800000);
208 else
209 legacy_reg = (struct vxge_hw_legacy_reg __iomem *)bar0;
210
212 if (status != VXGE_HW_OK)
213 return NULL;
214
215 return legacy_reg;
216}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
unsigned long pci_bar_size(struct pci_device *pci, unsigned int reg)
Get the size of a PCI BAR.
Definition pci.c:178
#define PCI_BASE_ADDRESS_0
Definition pci.h:63
enum vxge_hw_status __vxge_hw_legacy_swapper_set(struct vxge_hw_legacy_reg __iomem *legacy_reg)

References __iomem, __vxge_hw_legacy_swapper_set(), NULL, pci_bar_size(), PCI_BASE_ADDRESS_0, status, and VXGE_HW_OK.

Referenced by __vxge_hw_device_reg_addr_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_device_toc_get()

struct vxge_hw_toc_reg __iomem * __vxge_hw_device_toc_get ( void __iomem * bar0,
struct vxge_hw_legacy_reg __iomem * legacy_reg )

Definition at line 223 of file vxge_config.c.

225{
226 u64 val64;
227 struct vxge_hw_toc_reg __iomem *toc = NULL;
228
229 val64 = readq(&legacy_reg->toc_first_pointer);
230 toc = (struct vxge_hw_toc_reg __iomem *)(bar0+val64);
231
232 return toc;
233}

References __iomem, NULL, and readq.

Referenced by __vxge_hw_device_reg_addr_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_device_reg_addr_get()

enum vxge_hw_status __vxge_hw_device_reg_addr_get ( struct __vxge_hw_device * hldev)

Definition at line 242 of file vxge_config.c.

243{
244 u64 val64;
245 u32 i;
247
249 hldev->bar0);
250 if (hldev->legacy_reg == NULL) {
252 goto exit;
253 }
254
255 hldev->toc_reg = __vxge_hw_device_toc_get(hldev->bar0,
256 hldev->legacy_reg);
257 if (hldev->toc_reg == NULL) {
259 goto exit;
260 }
261
262 val64 = readq(&hldev->toc_reg->toc_common_pointer);
263 hldev->common_reg =
264 (struct vxge_hw_common_reg __iomem *)(hldev->bar0 + val64);
265
266 val64 = readq(&hldev->toc_reg->toc_mrpcim_pointer);
267 hldev->mrpcim_reg =
268 (struct vxge_hw_mrpcim_reg __iomem *)(hldev->bar0 + val64);
269
270 for (i = 0; i < VXGE_HW_TITAN_SRPCIM_REG_SPACES; i++) {
271 val64 = readq(&hldev->toc_reg->toc_srpcim_pointer[i]);
272 hldev->srpcim_reg[i] =
273 (struct vxge_hw_srpcim_reg __iomem *)
274 (hldev->bar0 + val64);
275 }
276
277 for (i = 0; i < VXGE_HW_TITAN_VPMGMT_REG_SPACES; i++) {
278 val64 = readq(&hldev->toc_reg->toc_vpmgmt_pointer[i]);
279 hldev->vpmgmt_reg[i] =
280 (struct vxge_hw_vpmgmt_reg __iomem *)(hldev->bar0 + val64);
281 }
282
283 for (i = 0; i < VXGE_HW_TITAN_VPATH_REG_SPACES; i++) {
284 val64 = readq(&hldev->toc_reg->toc_vpath_pointer[i]);
285 hldev->vpath_reg[i] =
286 (struct vxge_hw_vpath_reg __iomem *)
287 (hldev->bar0 + val64);
288 }
289
290 val64 = readq(&hldev->toc_reg->toc_kdfc);
291
292 switch (VXGE_HW_TOC_GET_KDFC_INITIAL_BIR(val64)) {
293 case 0:
294 hldev->kdfc = (u8 __iomem *)(hldev->bar0 +
296 break;
297 default:
298 break;
299 }
300
303exit:
304 return status;
305}
#define u8
Definition igbvf_osdep.h:40
struct vxge_hw_srpcim_reg * srpcim_reg[VXGE_HW_TITAN_SRPCIM_REG_SPACES]
struct vxge_hw_toc_reg * toc_reg
struct vxge_hw_common_reg * common_reg
struct vxge_hw_mrpcim_reg * mrpcim_reg
struct vxge_hw_legacy_reg * legacy_reg
struct vxge_hw_vpmgmt_reg * vpmgmt_reg[VXGE_HW_TITAN_VPMGMT_REG_SPACES]
void __iomem * bar0
u64 toc_mrpcim_pointer
Definition vxge_reg.h:677
u64 toc_common_pointer
Definition vxge_reg.h:669
u64 toc_vpath_pointer[17]
Definition vxge_reg.h:687
u64 toc_vpmgmt_pointer[17]
Definition vxge_reg.h:683
u64 toc_srpcim_pointer[17]
Definition vxge_reg.h:679
struct vxge_hw_toc_reg __iomem * __vxge_hw_device_toc_get(void __iomem *bar0, struct vxge_hw_legacy_reg __iomem *legacy_reg)
static struct vxge_hw_legacy_reg __iomem * __vxge_hw_device_get_legacy_reg(struct pci_device *pdev, void __iomem *bar0)
enum vxge_hw_status __vxge_hw_device_vpath_reset_in_prog_check(u64 __iomem *vpath_rst_in_prog)
#define VXGE_HW_TOC_GET_KDFC_INITIAL_OFFSET(val)
Definition vxge_reg.h:115
#define VXGE_HW_TITAN_VPATH_REG_SPACES
Definition vxge_reg.h:54
#define VXGE_HW_TITAN_VPMGMT_REG_SPACES
Definition vxge_reg.h:53
#define VXGE_HW_TITAN_SRPCIM_REG_SPACES
Definition vxge_reg.h:52
#define VXGE_HW_TOC_GET_KDFC_INITIAL_BIR(val)
Definition vxge_reg.h:117

References __iomem, __vxge_hw_device_get_legacy_reg(), __vxge_hw_device_toc_get(), __vxge_hw_device_vpath_reset_in_prog_check(), __vxge_hw_device::bar0, __vxge_hw_device::common_reg, __vxge_hw_device::kdfc, __vxge_hw_device::legacy_reg, __vxge_hw_device::mrpcim_reg, NULL, __vxge_hw_device::pdev, readq, __vxge_hw_device::srpcim_reg, status, vxge_hw_toc_reg::toc_common_pointer, vxge_hw_toc_reg::toc_kdfc, vxge_hw_toc_reg::toc_mrpcim_pointer, __vxge_hw_device::toc_reg, vxge_hw_toc_reg::toc_srpcim_pointer, vxge_hw_toc_reg::toc_vpath_pointer, vxge_hw_toc_reg::toc_vpmgmt_pointer, u32, u8, __vxge_hw_device::vpath_reg, vxge_hw_common_reg::vpath_rst_in_prog, __vxge_hw_device::vpmgmt_reg, VXGE_HW_FAIL, VXGE_HW_OK, VXGE_HW_TITAN_SRPCIM_REG_SPACES, VXGE_HW_TITAN_VPATH_REG_SPACES, VXGE_HW_TITAN_VPMGMT_REG_SPACES, VXGE_HW_TOC_GET_KDFC_INITIAL_BIR, and VXGE_HW_TOC_GET_KDFC_INITIAL_OFFSET.

Referenced by vxge_hw_device_initialize().

◆ __vxge_hw_device_access_rights_get()

u32 __vxge_hw_device_access_rights_get ( u32 host_type,
u32 func_id )
static

Definition at line 312 of file vxge_config.c.

313{
315
316 switch (host_type) {
318 if (func_id == 0) {
319 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
321 }
322 break;
324 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
326 break;
328 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
330 break;
334 break;
337 access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM;
338 break;
339 }
340
341 return access_rights;
342}
__be16 func_id
Definition CIB_PRM.h:2
#define VXGE_HW_NO_MR_SR_VH0_FUNCTION0
#define VXGE_HW_VH_NORMAL_FUNCTION
#define VXGE_HW_MR_SR_VH0_INVALID_CONFIG
#define VXGE_HW_DEVICE_ACCESS_RIGHT_VPATH
#define VXGE_HW_SR_VH_VIRTUAL_FUNCTION
#define VXGE_HW_NO_MR_SR_VH0_VIRTUAL_FUNCTION
#define VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION
#define VXGE_HW_MR_NO_SR_VH0_BASE_FUNCTION
#define VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM
#define VXGE_HW_SR_VH_FUNCTION0
#define VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM

References func_id, u32, VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM, VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM, VXGE_HW_DEVICE_ACCESS_RIGHT_VPATH, VXGE_HW_MR_NO_SR_VH0_BASE_FUNCTION, VXGE_HW_MR_SR_VH0_INVALID_CONFIG, VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION, VXGE_HW_NO_MR_SR_VH0_FUNCTION0, VXGE_HW_NO_MR_SR_VH0_VIRTUAL_FUNCTION, VXGE_HW_SR_VH_FUNCTION0, VXGE_HW_SR_VH_VIRTUAL_FUNCTION, and VXGE_HW_VH_NORMAL_FUNCTION.

Referenced by __vxge_hw_device_host_info_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_device_host_info_get()

void __vxge_hw_device_host_info_get ( struct __vxge_hw_device * hldev)

Definition at line 348 of file vxge_config.c.

349{
350 u64 val64;
351 u32 i;
352
353 val64 = readq(&hldev->common_reg->host_type_assignments);
354
355 hldev->host_type =
357
359
360 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
361
362 if (!(hldev->vpath_assignments & vxge_mBIT(i)))
363 continue;
364
365 hldev->func_id =
367
369 hldev->host_type, hldev->func_id);
370
371 hldev->first_vp_id = i;
372 break;
373 }
374
375 return;
376}
static u32 __vxge_hw_device_access_rights_get(u32 host_type, u32 func_id)
u32 __vxge_hw_vpath_func_id_get(struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg)
#define VXGE_HW_HOST_TYPE_ASSIGNMENTS_GET_HOST_TYPE_ASSIGNMENTS(bits)
Definition vxge_reg.h:47
#define vxge_mBIT(loc)
Definition vxge_reg.h:24
#define VXGE_HW_MAX_VIRTUAL_PATHS

References __vxge_hw_device_access_rights_get(), __vxge_hw_vpath_func_id_get(), __vxge_hw_device::access_rights, __vxge_hw_device::common_reg, __vxge_hw_device::first_vp_id, __vxge_hw_device::func_id, __vxge_hw_device::host_type, vxge_hw_common_reg::host_type_assignments, readq, u32, __vxge_hw_device::vpath_assignments, vxge_hw_common_reg::vpath_assignments, __vxge_hw_device::vpmgmt_reg, VXGE_HW_HOST_TYPE_ASSIGNMENTS_GET_HOST_TYPE_ASSIGNMENTS, VXGE_HW_MAX_VIRTUAL_PATHS, and vxge_mBIT.

Referenced by vxge_hw_device_initialize().

◆ vxge_hw_device_hw_info_get()

enum vxge_hw_status vxge_hw_device_hw_info_get ( struct pci_device * pdev,
void __iomem * bar0,
struct vxge_hw_device_hw_info * hw_info )

vxge_hw_device_hw_info_get - Get the hw information Returns the vpath mask that has the bits set for each vpath allocated for the driver, FW version information and the first mac addresse for each vpath

Definition at line 385 of file vxge_config.c.

387{
388 u32 i;
389 u64 val64;
390 struct vxge_hw_toc_reg __iomem *toc;
391 struct vxge_hw_mrpcim_reg __iomem *mrpcim_reg;
392 struct vxge_hw_common_reg __iomem *common_reg;
393 struct vxge_hw_vpath_reg __iomem *vpath_reg;
394 struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg;
395 struct vxge_hw_legacy_reg __iomem *legacy_reg;
397
398 vxge_trace();
399
400 memset(hw_info, 0, sizeof(struct vxge_hw_device_hw_info));
401
402 legacy_reg = __vxge_hw_device_get_legacy_reg(pdev, bar0);
403 if (legacy_reg == NULL) {
405 goto exit;
406 }
407
408 toc = __vxge_hw_device_toc_get(bar0, legacy_reg);
409 if (toc == NULL) {
411 goto exit;
412 }
413
414 val64 = readq(&toc->toc_common_pointer);
415 common_reg = (struct vxge_hw_common_reg __iomem *)(bar0 + val64);
416
418 (u64 __iomem *)&common_reg->vpath_rst_in_prog);
419 if (status != VXGE_HW_OK)
420 goto exit;
421
422 hw_info->vpath_mask = readq(&common_reg->vpath_assignments);
423
424 val64 = readq(&common_reg->host_type_assignments);
425
426 hw_info->host_type =
428
429 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
430
431 if (!((hw_info->vpath_mask) & vxge_mBIT(i)))
432 continue;
433
434 val64 = readq(&toc->toc_vpmgmt_pointer[i]);
435
436 vpmgmt_reg = (struct vxge_hw_vpmgmt_reg __iomem *)
437 (bar0 + val64);
438
439 hw_info->func_id = __vxge_hw_vpath_func_id_get(vpmgmt_reg);
441 hw_info->func_id) &
443
444 val64 = readq(&toc->toc_mrpcim_pointer);
445
446 mrpcim_reg = (struct vxge_hw_mrpcim_reg __iomem *)
447 (bar0 + val64);
448
449 writeq(0, &mrpcim_reg->xgmac_gen_fw_memo_mask);
450 wmb();
451 }
452
453 val64 = readq(&toc->toc_vpath_pointer[i]);
454
455 vpath_reg = (struct vxge_hw_vpath_reg __iomem *)(bar0 + val64);
456
457 status = __vxge_hw_vpath_fw_ver_get(vpath_reg, hw_info);
458 if (status != VXGE_HW_OK)
459 goto exit;
460
461 status = __vxge_hw_vpath_card_info_get(vpath_reg, hw_info);
462 if (status != VXGE_HW_OK)
463 goto exit;
464
465 break;
466 }
467
468 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
469
470 if (!((hw_info->vpath_mask) & vxge_mBIT(i)))
471 continue;
472
473 val64 = readq(&toc->toc_vpath_pointer[i]);
474 vpath_reg = (struct vxge_hw_vpath_reg __iomem *)(bar0 + val64);
475
477 hw_info->mac_addrs[i],
478 hw_info->mac_addr_masks[i]);
479 if (status != VXGE_HW_OK)
480 goto exit;
481 }
482exit:
483 return status;
484}
void * memset(void *dest, int character, size_t len) __nonnull
struct vxge_hw_device_hw_info - Device information @host_type: Host Type @func_id: Function Id @vpath...
enum vxge_hw_status __vxge_hw_vpath_card_info_get(struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_fw_ver_get(struct vxge_hw_vpath_reg __iomem *vpath_reg, struct vxge_hw_device_hw_info *hw_info)
enum vxge_hw_status __vxge_hw_vpath_addr_get(struct vxge_hw_vpath_reg *vpath_reg, u8(macaddr)[ETH_ALEN], u8(macaddr_mask)[ETH_ALEN])
@ VXGE_HW_ERR_CRITICAL

References __iomem, __vxge_hw_device_access_rights_get(), __vxge_hw_device_get_legacy_reg(), __vxge_hw_device_toc_get(), __vxge_hw_device_vpath_reset_in_prog_check(), __vxge_hw_vpath_addr_get(), __vxge_hw_vpath_card_info_get(), __vxge_hw_vpath_func_id_get(), __vxge_hw_vpath_fw_ver_get(), vxge_hw_device_hw_info::func_id, vxge_hw_device_hw_info::host_type, vxge_hw_common_reg::host_type_assignments, memset(), NULL, readq, status, vxge_hw_toc_reg::toc_common_pointer, vxge_hw_toc_reg::toc_mrpcim_pointer, vxge_hw_toc_reg::toc_vpath_pointer, vxge_hw_toc_reg::toc_vpmgmt_pointer, u32, vxge_hw_common_reg::vpath_assignments, vxge_hw_device_hw_info::vpath_mask, vxge_hw_common_reg::vpath_rst_in_prog, VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM, VXGE_HW_ERR_CRITICAL, VXGE_HW_HOST_TYPE_ASSIGNMENTS_GET_HOST_TYPE_ASSIGNMENTS, VXGE_HW_MAX_VIRTUAL_PATHS, VXGE_HW_OK, vxge_mBIT, vxge_trace, wmb, writeq, and vxge_hw_mrpcim_reg::xgmac_gen_fw_memo_mask.

Referenced by vxge_probe().

◆ vxge_hw_device_initialize()

enum vxge_hw_status vxge_hw_device_initialize ( struct __vxge_hw_device ** devh,
void * bar0,
struct pci_device * pdev,
u8 titan1 )

Definition at line 496 of file vxge_config.c.

501{
502 struct __vxge_hw_device *hldev = NULL;
504
505 vxge_trace();
506
507 hldev = (struct __vxge_hw_device *)
508 zalloc(sizeof(struct __vxge_hw_device));
509 if (hldev == NULL) {
510 vxge_debug(VXGE_ERR, "hldev allocation failed\n");
512 goto exit;
513 }
514
516
517 hldev->bar0 = bar0;
518 hldev->pdev = pdev;
519 hldev->titan1 = titan1;
520
522
524 if (status != VXGE_HW_OK) {
525 vxge_debug(VXGE_ERR, "%s:%d __vxge_hw_device_reg_addr_get "
526 "failed\n", __func__, __LINE__);
528 goto exit;
529 }
530
532
533 *devh = hldev;
534exit:
535 return status;
536}
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:662
struct __vxge_hw_device - Hal device object @magic: Magic Number @bar0: BAR0 virtual address.
void vxge_hw_device_terminate(struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_device_reg_addr_get(struct __vxge_hw_device *hldev)
void __vxge_hw_device_host_info_get(struct __vxge_hw_device *hldev)
void __vxge_hw_device_pci_e_init(struct __vxge_hw_device *hldev)
#define vxge_debug(mask, fmt...)
#define VXGE_ERR
Definition vxge_config.h:54
@ VXGE_HW_ERR_OUT_OF_MEMORY
Definition vxge_config.h:85
#define VXGE_HW_DEVICE_MAGIC

References __vxge_hw_device_host_info_get(), __vxge_hw_device_pci_e_init(), __vxge_hw_device_reg_addr_get(), __vxge_hw_device::bar0, __vxge_hw_device::magic, NULL, __vxge_hw_device::pdev, status, __vxge_hw_device::titan1, u8, vxge_debug, VXGE_ERR, VXGE_HW_DEVICE_MAGIC, vxge_hw_device_terminate(), VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_OK, vxge_trace, and zalloc().

Referenced by vxge_probe().

◆ vxge_hw_device_terminate()

void vxge_hw_device_terminate ( struct __vxge_hw_device * hldev)

Definition at line 543 of file vxge_config.c.

544{
545 vxge_trace();
546
548
549 hldev->magic = VXGE_HW_DEVICE_DEAD;
550 free(hldev);
551}
#define assert(condition)
Assert a condition at run-time.
Definition assert.h:50
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55
#define VXGE_HW_DEVICE_DEAD

References assert, free, __vxge_hw_device::magic, VXGE_HW_DEVICE_DEAD, VXGE_HW_DEVICE_MAGIC, and vxge_trace.

Referenced by vxge_hw_device_initialize(), vxge_probe(), and vxge_remove().

◆ vxge_hw_ring_replenish()

enum vxge_hw_status vxge_hw_ring_replenish ( struct __vxge_hw_ring * ring)

Definition at line 558 of file vxge_config.c.

559{
560 struct __vxge_hw_device *hldev;
561 struct vxge_hw_ring_rxd_1 *rxd;
563 u8 offset = 0;
565 u8 i, iob_off;
566
567 vxge_trace();
568
569 hldev = ring->vpathh->hldev;
570 /*
571 * We allocate all the dma buffers first and then share the
572 * these buffers among the all rx descriptors in the block.
573 */
574 for (i = 0; i < ARRAY_SIZE(ring->iobuf); i++) {
575 ring->iobuf[i] = alloc_iob(VXGE_LL_MAX_FRAME_SIZE(hldev->vdev));
576 if (!ring->iobuf[i]) {
577 while (i) {
578 free_iob(ring->iobuf[--i]);
579 ring->iobuf[i] = NULL;
580 }
582 goto iobuf_err;
583 }
584 }
585
587
588 rxd = &ring->rxdl->rxd[offset];
591 else
592 iob_off = offset % ring->buf_per_block;
593
594 rxd->control_0 = rxd->control_1 = 0;
595 vxge_hw_ring_rxd_1b_set(rxd, ring->iobuf[iob_off],
597
599 }
600 /* linking the block to itself as we use only one rx block*/
601 block = ring->rxdl;
602 block->reserved_2_pNext_RxD_block = (unsigned long) block;
603 block->pNext_RxD_Blk_physical = (u64)virt_to_bus(block);
604
605 ring->rxd_offset = 0;
606iobuf_err:
607 return status;
608}
#define rxd
Definition davicom.c:146
#define ARRAY_SIZE(x)
Definition efx_common.h:43
static __always_inline unsigned long virt_to_bus(volatile const void *addr)
Convert virtual address to a bus address.
Definition io.h:184
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
Definition iobuf.c:153
struct io_buffer * alloc_iob(size_t len)
Allocate I/O buffer.
Definition iobuf.c:131
uint8_t block[3][8]
DES-encrypted blocks.
Definition mschapv2.h:1
struct vxgedev * vdev
struct vxge_hw_ring_rxd_1 rxd[VXGE_HW_MAX_RXDS_PER_BLOCK_1]
struct io_buffer * iobuf[VXGE_HW_RING_BUF_PER_BLOCK+1]
struct __vxge_hw_ring_block * rxdl
struct __vxge_hw_virtualpath * vpathh
struct __vxge_hw_device * hldev
struct vxge_hw_ring_rxd_1 - One buffer mode RxD for ring
#define VXGE_HW_RING_BUF_PER_BLOCK
static void vxge_hw_ring_rxd_1b_set(struct vxge_hw_ring_rxd_1 *rxdp, struct io_buffer *iob, u32 size)
vxge_hw_ring_rxd_1b_set - Prepare 1-buffer-mode descriptor.
#define VXGE_HW_MAX_RXDS_PER_BLOCK_1
#define VXGE_LL_MAX_FRAME_SIZE(dev)
Definition vxge_main.h:147
void vxge_hw_ring_rxd_post(struct __vxge_hw_ring *ring __unused, struct vxge_hw_ring_rxd_1 *rxdp)
vxge_hw_ring_rxd_post - Post descriptor on the ring.

References alloc_iob(), ARRAY_SIZE, block, __vxge_hw_ring::buf_per_block, free_iob(), __vxge_hw_virtualpath::hldev, __vxge_hw_ring::iobuf, NULL, offset, __vxge_hw_ring_block::rxd, rxd, __vxge_hw_ring::rxd_offset, __vxge_hw_ring::rxdl, status, u8, __vxge_hw_device::vdev, virt_to_bus(), __vxge_hw_ring::vpathh, VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_MAX_RXDS_PER_BLOCK_1, VXGE_HW_OK, VXGE_HW_RING_BUF_PER_BLOCK, vxge_hw_ring_rxd_1b_set(), vxge_hw_ring_rxd_post(), VXGE_LL_MAX_FRAME_SIZE, and vxge_trace.

Referenced by __vxge_hw_ring_create().

◆ __vxge_hw_ring_create()

enum vxge_hw_status __vxge_hw_ring_create ( struct __vxge_hw_virtualpath * vpath,
struct __vxge_hw_ring * ring )

Definition at line 616 of file vxge_config.c.

618{
620 struct __vxge_hw_device *hldev;
621 u32 vp_id;
622
623 vxge_trace();
624
625 hldev = vpath->hldev;
626 vp_id = vpath->vp_id;
627
628 ring->rxdl = malloc_phys(sizeof(struct __vxge_hw_ring_block),
629 sizeof(struct __vxge_hw_ring_block));
630 if (!ring->rxdl) {
631 vxge_debug(VXGE_ERR, "%s:%d malloc_phys error\n",
632 __func__, __LINE__);
634 goto exit;
635 }
636 ring->rxd_offset = 0;
637 ring->vpathh = vpath;
640 ring->vp_id = vp_id;
641 ring->vp_reg = vpath->vp_reg;
642 ring->common_reg = hldev->common_reg;
643
645
647 if (status != VXGE_HW_OK) {
649 goto exit;
650 }
651exit:
652 return status;
653}
void * malloc_phys(size_t size, size_t phys_align)
Allocate memory with specified physical alignment.
Definition malloc.c:733
struct vxge_hw_vpath_reg * vp_reg
struct vxge_hw_common_reg * common_reg
enum vxge_hw_status __vxge_hw_ring_delete(struct __vxge_hw_ring *ring)
enum vxge_hw_status vxge_hw_ring_replenish(struct __vxge_hw_ring *ring)
#define VXGE_HW_RING_RXD_QWORD_LIMIT
#define VXGE_HW_RING_RX_POLL_WEIGHT

References __vxge_hw_ring_delete(), __vxge_hw_ring::buf_per_block, __vxge_hw_device::common_reg, __vxge_hw_ring::common_reg, __vxge_hw_virtualpath::hldev, malloc_phys(), __vxge_hw_ring::rx_poll_weight, __vxge_hw_ring::rxd_offset, __vxge_hw_ring::rxd_qword_limit, __vxge_hw_ring::rxdl, status, u32, __vxge_hw_ring::vp_id, __vxge_hw_virtualpath::vp_id, __vxge_hw_ring::vp_reg, __vxge_hw_virtualpath::vp_reg, __vxge_hw_ring::vpathh, vxge_debug, VXGE_ERR, VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_OK, VXGE_HW_RING_BUF_PER_BLOCK, vxge_hw_ring_replenish(), VXGE_HW_RING_RX_POLL_WEIGHT, VXGE_HW_RING_RXD_QWORD_LIMIT, and vxge_trace.

Referenced by vxge_hw_vpath_open().

◆ __vxge_hw_ring_delete()

enum vxge_hw_status __vxge_hw_ring_delete ( struct __vxge_hw_ring * ring)

Definition at line 659 of file vxge_config.c.

660{
661 u8 i;
662
663 vxge_trace();
664
665 for (i = 0; (i < ARRAY_SIZE(ring->iobuf)) && ring->iobuf[i]; i++) {
666 free_iob(ring->iobuf[i]);
667 ring->iobuf[i] = NULL;
668 }
669
670 if (ring->rxdl) {
671 free_phys(ring->rxdl, sizeof(struct __vxge_hw_ring_block));
672 ring->rxdl = NULL;
673 }
674 ring->rxd_offset = 0;
675
676 return VXGE_HW_OK;
677}
void free_phys(void *ptr, size_t size)
Free memory allocated with malloc_phys().
Definition malloc.c:749

References ARRAY_SIZE, free_iob(), free_phys(), __vxge_hw_ring::iobuf, NULL, __vxge_hw_ring::rxd_offset, __vxge_hw_ring::rxdl, u8, VXGE_HW_OK, and vxge_trace.

Referenced by __vxge_hw_ring_create(), and vxge_hw_vpath_close().

◆ __vxge_hw_legacy_swapper_set()

enum vxge_hw_status __vxge_hw_legacy_swapper_set ( struct vxge_hw_legacy_reg __iomem * legacy_reg)

Definition at line 684 of file vxge_config.c.

685{
686 u64 val64;
688
689 vxge_trace();
690
691 val64 = readq(&legacy_reg->toc_swapper_fb);
692
693 wmb();
694
695 switch (val64) {
696
698 return status;
699
702 &legacy_reg->pifm_rd_swap_en);
704 &legacy_reg->pifm_rd_flip_en);
706 &legacy_reg->pifm_wr_swap_en);
708 &legacy_reg->pifm_wr_flip_en);
709 break;
710
713 &legacy_reg->pifm_rd_swap_en);
715 &legacy_reg->pifm_wr_swap_en);
716 break;
717
720 &legacy_reg->pifm_rd_flip_en);
722 &legacy_reg->pifm_wr_flip_en);
723 break;
724 }
725
726 wmb();
727
728 val64 = readq(&legacy_reg->toc_swapper_fb);
731
732 return status;
733}
@ VXGE_HW_ERR_SWAPPER_CTRL
Definition vxge_config.h:89
#define VXGE_HW_SWAPPER_WRITE_BYTE_SWAP_ENABLE
Definition vxge_reg.h:633
#define VXGE_HW_SWAPPER_READ_BIT_FLAP_ENABLE
Definition vxge_reg.h:630
#define VXGE_HW_SWAPPER_INITIAL_VALUE
Definition vxge_reg.h:622
#define VXGE_HW_SWAPPER_BIT_FLIPPED
Definition vxge_reg.h:624
#define VXGE_HW_SWAPPER_WRITE_BIT_FLAP_ENABLE
Definition vxge_reg.h:636
#define VXGE_HW_SWAPPER_BYTE_SWAPPED
Definition vxge_reg.h:623
#define VXGE_HW_SWAPPER_READ_BYTE_SWAP_ENABLE
Definition vxge_reg.h:627
#define VXGE_HW_SWAPPER_BYTE_SWAPPED_BIT_FLIPPED
Definition vxge_reg.h:625

References __iomem, __vxge_hw_device::legacy_reg, vxge_hw_legacy_reg::pifm_rd_flip_en, vxge_hw_legacy_reg::pifm_rd_swap_en, vxge_hw_legacy_reg::pifm_wr_flip_en, vxge_hw_legacy_reg::pifm_wr_swap_en, readq, status, vxge_hw_legacy_reg::toc_swapper_fb, VXGE_HW_ERR_SWAPPER_CTRL, VXGE_HW_OK, VXGE_HW_SWAPPER_BIT_FLIPPED, VXGE_HW_SWAPPER_BYTE_SWAPPED, VXGE_HW_SWAPPER_BYTE_SWAPPED_BIT_FLIPPED, VXGE_HW_SWAPPER_INITIAL_VALUE, VXGE_HW_SWAPPER_READ_BIT_FLAP_ENABLE, VXGE_HW_SWAPPER_READ_BYTE_SWAP_ENABLE, VXGE_HW_SWAPPER_WRITE_BIT_FLAP_ENABLE, VXGE_HW_SWAPPER_WRITE_BYTE_SWAP_ENABLE, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_device_get_legacy_reg(), and __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_swapper_set()

enum vxge_hw_status __vxge_hw_vpath_swapper_set ( struct vxge_hw_vpath_reg __iomem * vpath_reg)

Definition at line 740 of file vxge_config.c.

741{
742 u64 val64;
743 vxge_trace();
744
745 if (__BYTE_ORDER != __BIG_ENDIAN) {
746 val64 = readq(&vpath_reg->vpath_general_cfg1);
747 wmb();
749 writeq(val64, &vpath_reg->vpath_general_cfg1);
750 wmb();
751 }
752 return VXGE_HW_OK;
753}
#define __BYTE_ORDER
Definition endian.h:7
#define __BIG_ENDIAN
Constant representing big-endian byte order.
Definition endian.h:22
#define VXGE_HW_VPATH_GENERAL_CFG1_CTL_BYTE_SWAPEN
Definition vxge_reg.h:4580

References __BIG_ENDIAN, __BYTE_ORDER, __iomem, readq, vxge_hw_vpath_reg::vpath_general_cfg1, __vxge_hw_device::vpath_reg, VXGE_HW_OK, VXGE_HW_VPATH_GENERAL_CFG1_CTL_BYTE_SWAPEN, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_kdfc_swapper_set()

enum vxge_hw_status __vxge_hw_kdfc_swapper_set ( struct vxge_hw_legacy_reg __iomem * legacy_reg,
struct vxge_hw_vpath_reg __iomem * vpath_reg )

Definition at line 760 of file vxge_config.c.

763{
764 u64 val64;
765
766 vxge_trace();
767
768 val64 = readq(&legacy_reg->pifm_wr_swap_en);
769
771 val64 = readq(&vpath_reg->kdfcctl_cfg0);
772 wmb();
773
777
778 writeq(val64, &vpath_reg->kdfcctl_cfg0);
779 wmb();
780 }
781
782 return VXGE_HW_OK;
783}
#define VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO0
Definition vxge_reg.h:4593
#define VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO1
Definition vxge_reg.h:4594
#define VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO2
Definition vxge_reg.h:4595

References __iomem, vxge_hw_vpath_reg::kdfcctl_cfg0, __vxge_hw_device::legacy_reg, vxge_hw_legacy_reg::pifm_wr_swap_en, readq, __vxge_hw_device::vpath_reg, VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO0, VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO1, VXGE_HW_KDFCCTL_CFG0_BYTE_SWAPEN_FIFO2, VXGE_HW_OK, VXGE_HW_SWAPPER_WRITE_BYTE_SWAP_ENABLE, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_vpath_kdfc_configure().

◆ vxge_hw_vpath_strip_fcs_check()

enum vxge_hw_status vxge_hw_vpath_strip_fcs_check ( struct __vxge_hw_device * hldev,
u64 vpath_mask )

Definition at line 789 of file vxge_config.c.

790{
791 struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg;
793 int i = 0, j = 0;
794
795 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
796 if (!((vpath_mask) & vxge_mBIT(i)))
797 continue;
798 vpmgmt_reg = hldev->vpmgmt_reg[i];
799 for (j = 0; j < VXGE_HW_MAC_MAX_MAC_PORT_ID; j++) {
800 if (readq(&vpmgmt_reg->rxmac_cfg0_port_vpmgmt_clone[j])
802 return VXGE_HW_FAIL;
803 }
804 }
805 return status;
806}
u64 rxmac_cfg0_port_vpmgmt_clone[3]
Definition vxge_reg.h:3916
#define VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_STRIP_FCS
Definition vxge_reg.h:3918
#define VXGE_HW_MAC_MAX_MAC_PORT_ID

References __iomem, readq, vxge_hw_vpmgmt_reg::rxmac_cfg0_port_vpmgmt_clone, status, __vxge_hw_device::vpmgmt_reg, VXGE_HW_FAIL, VXGE_HW_MAC_MAX_MAC_PORT_ID, VXGE_HW_MAX_VIRTUAL_PATHS, VXGE_HW_OK, VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_STRIP_FCS, and vxge_mBIT.

Referenced by vxge_probe().

◆ __vxge_hw_fifo_create()

enum vxge_hw_status __vxge_hw_fifo_create ( struct __vxge_hw_virtualpath * vpath,
struct __vxge_hw_fifo * fifo )

Definition at line 813 of file vxge_config.c.

815{
817
818 vxge_trace();
819
820 fifo->vpathh = vpath;
822 fifo->hw_offset = fifo->sw_offset = 0;
823 fifo->nofl_db = vpath->nofl_db;
824 fifo->vp_id = vpath->vp_id;
825 fifo->vp_reg = vpath->vp_reg;
826 fifo->tx_intr_num = (vpath->vp_id * VXGE_HW_MAX_INTR_PER_VP)
828
829 fifo->txdl = malloc_phys(sizeof(struct vxge_hw_fifo_txd)
830 * fifo->depth, fifo->depth);
831 if (!fifo->txdl) {
832 vxge_debug(VXGE_ERR, "%s:%d malloc_phys error\n",
833 __func__, __LINE__);
835 }
836 memset(fifo->txdl, 0, sizeof(struct vxge_hw_fifo_txd) * fifo->depth);
837 return status;
838}
struct vxge_hw_vpath_reg * vp_reg
struct __vxge_hw_non_offload_db_wrapper * nofl_db
struct __vxge_hw_virtualpath * vpathh
struct vxge_hw_fifo_txd * txdl
struct __vxge_hw_non_offload_db_wrapper * nofl_db
struct vxge_hw_fifo_txd - Transmit Descriptor
#define VXGE_HW_FIFO_TXD_DEPTH
#define VXGE_HW_VPATH_INTR_TX
#define VXGE_HW_MAX_INTR_PER_VP

References __vxge_hw_fifo::depth, __vxge_hw_fifo::hw_offset, malloc_phys(), memset(), __vxge_hw_fifo::nofl_db, __vxge_hw_virtualpath::nofl_db, status, __vxge_hw_fifo::sw_offset, __vxge_hw_fifo::tx_intr_num, __vxge_hw_fifo::txdl, __vxge_hw_fifo::vp_id, __vxge_hw_virtualpath::vp_id, __vxge_hw_fifo::vp_reg, __vxge_hw_virtualpath::vp_reg, __vxge_hw_fifo::vpathh, vxge_debug, VXGE_ERR, VXGE_HW_ERR_OUT_OF_MEMORY, VXGE_HW_FIFO_TXD_DEPTH, VXGE_HW_MAX_INTR_PER_VP, VXGE_HW_OK, VXGE_HW_VPATH_INTR_TX, and vxge_trace.

Referenced by vxge_hw_vpath_open().

◆ __vxge_hw_fifo_delete()

enum vxge_hw_status __vxge_hw_fifo_delete ( struct __vxge_hw_fifo * fifo)

Definition at line 844 of file vxge_config.c.

845{
846 vxge_trace();
847
848 if (fifo->txdl)
849 free_phys(fifo->txdl,
850 sizeof(struct vxge_hw_fifo_txd) * fifo->depth);
851
852 fifo->txdl = NULL;
853 fifo->hw_offset = fifo->sw_offset = 0;
854
855 return VXGE_HW_OK;
856}

References __vxge_hw_fifo::depth, free_phys(), __vxge_hw_fifo::hw_offset, NULL, __vxge_hw_fifo::sw_offset, __vxge_hw_fifo::txdl, VXGE_HW_OK, and vxge_trace.

Referenced by vxge_hw_vpath_close(), and vxge_hw_vpath_open().

◆ __vxge_hw_vpath_pci_read()

enum vxge_hw_status __vxge_hw_vpath_pci_read ( struct __vxge_hw_virtualpath * vpath,
u32 phy_func_0,
u32 offset,
u32 * val )

Definition at line 864 of file vxge_config.c.

866{
867 u64 val64;
869 struct vxge_hw_vpath_reg __iomem *vp_reg = vpath->vp_reg;
870
872
873 if (phy_func_0)
875
876 writeq(val64, &vp_reg->pci_config_access_cfg1);
877 wmb();
879 &vp_reg->pci_config_access_cfg2);
880 wmb();
881
883 &vp_reg->pci_config_access_cfg2,
885
886 if (status != VXGE_HW_OK)
887 goto exit;
888
889 val64 = readq(&vp_reg->pci_config_access_status);
890
893 *val = 0;
894 } else
895 *val = (u32)vxge_bVALn(val64, 32, 32);
896exit:
897 return status;
898}
void __asmcall int val
Definition setjmp.h:12
u64 pci_config_access_status
Definition vxge_reg.h:4653
#define VXGE_HW_PCI_CONFIG_ACCESS_CFG1_ADDRESS(val)
Definition vxge_reg.h:4649
#define vxge_bVALn(bits, loc, n)
Definition vxge_reg.h:35
#define VXGE_HW_PCI_CONFIG_ACCESS_STATUS_ACCESS_ERR
Definition vxge_reg.h:4654
#define VXGE_HW_PCI_CONFIG_ACCESS_CFG1_SEL_FUNC0
Definition vxge_reg.h:4650
#define VXGE_HW_PCI_CONFIG_ACCESS_CFG2_REQ
Definition vxge_reg.h:4652
#define VXGE_HW_INTR_MASK_ALL

References __iomem, __vxge_hw_device_register_poll(), offset, vxge_hw_vpath_reg::pci_config_access_cfg1, vxge_hw_vpath_reg::pci_config_access_cfg2, vxge_hw_vpath_reg::pci_config_access_status, readq, status, u32, val, __vxge_hw_virtualpath::vp_reg, vxge_bVALn, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_INTR_MASK_ALL, VXGE_HW_OK, VXGE_HW_PCI_CONFIG_ACCESS_CFG1_ADDRESS, VXGE_HW_PCI_CONFIG_ACCESS_CFG1_SEL_FUNC0, VXGE_HW_PCI_CONFIG_ACCESS_CFG2_REQ, VXGE_HW_PCI_CONFIG_ACCESS_STATUS_ACCESS_ERR, wmb, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_func_id_get()

u32 __vxge_hw_vpath_func_id_get ( struct vxge_hw_vpmgmt_reg __iomem * vpmgmt_reg)

Definition at line 905 of file vxge_config.c.

906{
907 u64 val64;
908
909 val64 = readq(&vpmgmt_reg->vpath_to_func_map_cfg1);
910
911 return
913}
#define VXGE_HW_VPATH_TO_FUNC_MAP_CFG1_GET_VPATH_TO_FUNC_MAP_CFG1(bits)
Definition vxge_reg.h:45

References __iomem, readq, u32, and VXGE_HW_VPATH_TO_FUNC_MAP_CFG1_GET_VPATH_TO_FUNC_MAP_CFG1.

Referenced by __vxge_hw_device_host_info_get(), and vxge_hw_device_hw_info_get().

◆ __vxge_hw_read_rts_ds()

void __vxge_hw_read_rts_ds ( struct vxge_hw_vpath_reg __iomem * vpath_reg,
u64 dta_struct_sel )
inlinestatic

Definition at line 919 of file vxge_config.c.

921{
922 writeq(0, &vpath_reg->rts_access_steer_ctrl);
923 wmb();
924 writeq(dta_struct_sel, &vpath_reg->rts_access_steer_data0);
925 writeq(0, &vpath_reg->rts_access_steer_data1);
926 wmb();
927 return;
928}

References __iomem, wmb, and writeq.

Referenced by __vxge_hw_vpath_card_info_get().

◆ __vxge_hw_vpath_card_info_get()

enum vxge_hw_status __vxge_hw_vpath_card_info_get ( struct vxge_hw_vpath_reg __iomem * vpath_reg,
struct vxge_hw_device_hw_info * hw_info )

Definition at line 935 of file vxge_config.c.

938{
939 u32 i, j;
940 u64 val64;
941 u64 data1 = 0ULL;
942 u64 data2 = 0ULL;
944 u8 *serial_number = hw_info->serial_number;
945 u8 *part_number = hw_info->part_number;
946 u8 *product_desc = hw_info->product_desc;
947
948 __vxge_hw_read_rts_ds(vpath_reg,
950
957
959 &vpath_reg->rts_access_steer_ctrl,
962
963 if (status != VXGE_HW_OK)
964 return status;
965
966 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
967
969 data1 = readq(&vpath_reg->rts_access_steer_data0);
970 ((u64 *)serial_number)[0] = be64_to_cpu(data1);
971
972 data2 = readq(&vpath_reg->rts_access_steer_data1);
973 ((u64 *)serial_number)[1] = be64_to_cpu(data2);
975 } else
976 *serial_number = 0;
977
978 __vxge_hw_read_rts_ds(vpath_reg,
980
987
989 &vpath_reg->rts_access_steer_ctrl,
992
993 if (status != VXGE_HW_OK)
994 return status;
995
996 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
997
999
1000 data1 = readq(&vpath_reg->rts_access_steer_data0);
1001 ((u64 *)part_number)[0] = be64_to_cpu(data1);
1002
1003 data2 = readq(&vpath_reg->rts_access_steer_data1);
1004 ((u64 *)part_number)[1] = be64_to_cpu(data2);
1005
1007
1008 } else
1009 *part_number = 0;
1010
1011 j = 0;
1012
1015
1016 __vxge_hw_read_rts_ds(vpath_reg, i);
1017
1024
1026 &vpath_reg->rts_access_steer_ctrl,
1029
1030 if (status != VXGE_HW_OK)
1031 return status;
1032
1033 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
1034
1036
1037 data1 = readq(&vpath_reg->rts_access_steer_data0);
1038 ((u64 *)product_desc)[j++] = be64_to_cpu(data1);
1039
1040 data2 = readq(&vpath_reg->rts_access_steer_data1);
1041 ((u64 *)product_desc)[j++] = be64_to_cpu(data2);
1042
1044 } else
1045 *product_desc = 0;
1046 }
1047
1048 return status;
1049}
u32 data2
Definition ar9003_mac.h:6
#define be64_to_cpu(value)
Definition byteswap.h:118
u8 serial_number[VXGE_HW_INFO_LEN]
u8 product_desc[VXGE_HW_INFO_LEN]
u8 part_number[VXGE_HW_INFO_LEN]
static void __vxge_hw_read_rts_ds(struct vxge_hw_vpath_reg __iomem *vpath_reg, u64 dta_struct_sel)
static enum vxge_hw_status __vxge_hw_pio_mem_write64(u64 val64, void __iomem *addr, u64 mask, u32 max_millis)
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_3
Definition vxge_reg.h:424
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_0
Definition vxge_reg.h:421
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_SERIAL_NUMBER
Definition vxge_reg.h:418
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_PART_NUMBER
Definition vxge_reg.h:417
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_MEMO_ENTRY
Definition vxge_reg.h:188

References __iomem, __vxge_hw_pio_mem_write64(), __vxge_hw_read_rts_ds(), be64_to_cpu, data1, data2, vxge_hw_device_hw_info::part_number, vxge_hw_device_hw_info::product_desc, readq, vxge_hw_device_hw_info::serial_number, status, u32, u8, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_MEMO_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_0, VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_DESC_3, VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_PART_NUMBER, and VXGE_HW_RTS_ACCESS_STEER_DATA0_MEMO_ITEM_SERIAL_NUMBER.

Referenced by vxge_hw_device_hw_info_get().

◆ __vxge_hw_vpath_fw_ver_get()

enum vxge_hw_status __vxge_hw_vpath_fw_ver_get ( struct vxge_hw_vpath_reg __iomem * vpath_reg,
struct vxge_hw_device_hw_info * hw_info )

Definition at line 1056 of file vxge_config.c.

1059{
1060 u64 val64;
1061 u64 data1 = 0ULL;
1062 u64 data2 = 0ULL;
1063 struct vxge_hw_device_version *fw_version = &hw_info->fw_version;
1064 struct vxge_hw_device_date *fw_date = &hw_info->fw_date;
1065 struct vxge_hw_device_version *flash_version = &hw_info->flash_version;
1066 struct vxge_hw_device_date *flash_date = &hw_info->flash_date;
1068
1075
1077 &vpath_reg->rts_access_steer_ctrl,
1080
1081 if (status != VXGE_HW_OK)
1082 goto exit;
1083
1084 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
1085
1087
1088 data1 = readq(&vpath_reg->rts_access_steer_data0);
1089 data2 = readq(&vpath_reg->rts_access_steer_data1);
1090
1091 fw_date->day =
1093 data1);
1094 fw_date->month =
1096 data1);
1097 fw_date->year =
1099 data1);
1100
1101 snprintf(fw_date->date, VXGE_HW_FW_STRLEN, "%d/%d/%d",
1102 fw_date->month, fw_date->day, fw_date->year);
1103
1104 fw_version->major =
1106 fw_version->minor =
1108 fw_version->build =
1110
1111 snprintf(fw_version->version, VXGE_HW_FW_STRLEN, "%d.%d.%d",
1112 fw_version->major, fw_version->minor, fw_version->build);
1113
1114 flash_date->day =
1116 flash_date->month =
1118 flash_date->year =
1120
1121 snprintf(flash_date->date, VXGE_HW_FW_STRLEN, "%d/%d/%d",
1122 flash_date->month, flash_date->day, flash_date->year);
1123
1124 flash_version->major =
1126 flash_version->minor =
1128 flash_version->build =
1130
1131 snprintf(flash_version->version, VXGE_HW_FW_STRLEN, "%d.%d.%d",
1132 flash_version->major, flash_version->minor,
1133 flash_version->build);
1134
1136
1137 } else
1139exit:
1140 return status;
1141}
char date[VXGE_HW_FW_STRLEN]
struct vxge_hw_device_version flash_version
struct vxge_hw_device_date flash_date
struct vxge_hw_device_version fw_version
struct vxge_hw_device_date fw_date
char version[VXGE_HW_FW_STRLEN]
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition vsprintf.c:383
#define VXGE_HW_FW_STRLEN
struct vxge_hw_device_date - Date Format @day: Day @month: Month @year: Year
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_DAY(bits)
Definition vxge_reg.h:440
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_BUILD(bits)
Definition vxge_reg.h:479
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_DAY(bits)
Definition vxge_reg.h:462
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MINOR(bits)
Definition vxge_reg.h:476
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_YEAR(bits)
Definition vxge_reg.h:468
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_ENTRY
Definition vxge_reg.h:186
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MAJOR(bits)
Definition vxge_reg.h:451
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MONTH(bits)
Definition vxge_reg.h:465
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MINOR(bits)
Definition vxge_reg.h:454
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MAJOR(bits)
Definition vxge_reg.h:473
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_BUILD(bits)
Definition vxge_reg.h:457
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MONTH(bits)
Definition vxge_reg.h:443
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_YEAR(bits)
Definition vxge_reg.h:446

References __iomem, __vxge_hw_pio_mem_write64(), vxge_hw_device_version::build, data1, data2, vxge_hw_device_date::date, vxge_hw_device_date::day, vxge_hw_device_hw_info::flash_date, vxge_hw_device_hw_info::flash_version, vxge_hw_device_hw_info::fw_date, vxge_hw_device_hw_info::fw_version, vxge_hw_device_version::major, vxge_hw_device_version::minor, vxge_hw_device_date::month, readq, snprintf(), status, u32, vxge_hw_device_version::version, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_FW_STRLEN, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_READ_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_FW_MEMO, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_BUILD, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_DAY, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MAJOR, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MINOR, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_MONTH, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_FW_VER_YEAR, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_BUILD, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_DAY, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MAJOR, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MINOR, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_MONTH, VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_FLASH_VER_YEAR, and vxge_hw_device_date::year.

Referenced by vxge_hw_device_hw_info_get().

◆ __vxge_hw_vpath_addr_get()

enum vxge_hw_status __vxge_hw_vpath_addr_get ( struct vxge_hw_vpath_reg * vpath_reg,
u8(macaddr) [ETH_ALEN],
u8(macaddr_mask) [ETH_ALEN] )

Definition at line 1148 of file vxge_config.c.

1151{
1152 u32 i;
1153 u64 val64;
1154 u64 data1 = 0ULL;
1155 u64 data2 = 0ULL;
1158
1159 while (1) {
1160 val64 = VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION(action) |
1165
1167 &vpath_reg->rts_access_steer_ctrl,
1170
1171 if (status != VXGE_HW_OK)
1172 break;
1173
1174 val64 = readq(&vpath_reg->rts_access_steer_ctrl);
1175
1177
1178 data1 = readq(&vpath_reg->rts_access_steer_data0);
1179 data2 = readq(&vpath_reg->rts_access_steer_data1);
1180
1181 data1 =
1183 data2 =
1185 data2);
1186
1187 for (i = ETH_ALEN; i > 0; i--) {
1188 macaddr[i-1] = (u8)(data1 & 0xFF);
1189 data1 >>= 8;
1190
1191 macaddr_mask[i-1] = (u8)(data2 & 0xFF);
1192 data2 >>= 8;
1193 }
1194 if (is_valid_ether_addr(macaddr)) {
1196 break;
1197 }
1198 action =
1200 } else
1202 }
1203
1204 return status;
1205}
static int is_valid_ether_addr(const void *addr)
Check if Ethernet address is valid.
Definition ethernet.h:78
#define ETH_ALEN
Definition if_ether.h:9
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_NEXT_ENTRY
Definition vxge_reg.h:185
#define VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_DA_MAC_ADDR_MASK(bits)
Definition vxge_reg.h:365
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_FIRST_ENTRY
Definition vxge_reg.h:184
#define VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_DA_MAC_ADDR(bits)
Definition vxge_reg.h:206
#define VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_DA
Definition vxge_reg.h:192

References __vxge_hw_pio_mem_write64(), data1, data2, ETH_ALEN, is_valid_ether_addr(), readq, vxge_hw_vpath_reg::rts_access_steer_ctrl, vxge_hw_vpath_reg::rts_access_steer_data0, vxge_hw_vpath_reg::rts_access_steer_data1, status, u32, u8, VXGE_HW_DEF_DEVICE_POLL_MILLIS, VXGE_HW_FAIL, VXGE_HW_OK, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_FIRST_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_ACTION_LIST_NEXT_ENTRY, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL, VXGE_HW_RTS_ACCESS_STEER_CTRL_DATA_STRUCT_SEL_DA, VXGE_HW_RTS_ACCESS_STEER_CTRL_OFFSET, VXGE_HW_RTS_ACCESS_STEER_CTRL_RMACJ_STATUS, VXGE_HW_RTS_ACCESS_STEER_CTRL_STROBE, VXGE_HW_RTS_ACCESS_STEER_DATA0_GET_DA_MAC_ADDR, and VXGE_HW_RTS_ACCESS_STEER_DATA1_GET_DA_MAC_ADDR_MASK.

Referenced by vxge_hw_device_hw_info_get().

◆ __vxge_hw_vpath_mgmt_read()

enum vxge_hw_status __vxge_hw_vpath_mgmt_read ( struct __vxge_hw_virtualpath * vpath)
static

Definition at line 1212 of file vxge_config.c.

1214{
1215 u32 i, mtu = 0, max_pyld = 0;
1216 u64 val64;
1218
1219 for (i = 0; i < VXGE_HW_MAC_MAX_MAC_PORT_ID; i++) {
1220
1221 val64 = readq(&vpath->vpmgmt_reg->
1223 max_pyld =
1224 (u32)
1226 (val64);
1227 if (mtu < max_pyld)
1228 mtu = max_pyld;
1229 }
1230
1232
1234
1237 else
1239
1240 return status;
1241}
uint32_t mtu
Maximum MTU.
Definition ena.h:17
struct vxge_hw_vpmgmt_reg * vpmgmt_reg
u64 xgmac_gen_status_vpmgmt_clone
Definition vxge_reg.h:3950
@ VXGE_HW_LINK_UP
@ VXGE_HW_LINK_DOWN
#define VXGE_HW_DEVICE_LINK_STATE_SET(hldev, ls)
#define VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_GET_MAX_PYLD_LEN(bits)
Definition vxge_reg.h:96
#define VXGE_HW_XGMAC_GEN_STATUS_VPMGMT_CLONE_XMACJ_NTWK_OK
Definition vxge_reg.h:3951
u64 rxmac_cfg0_port_vpmgmt_clone[3]
Definition vxge_reg.h:78
#define VXGE_HW_MAC_HEADER_MAX_SIZE

References __vxge_hw_virtualpath::hldev, __vxge_hw_virtualpath::max_mtu, mtu, readq, rxmac_cfg0_port_vpmgmt_clone, status, u32, __vxge_hw_virtualpath::vpmgmt_reg, VXGE_HW_DEVICE_LINK_STATE_SET, VXGE_HW_LINK_DOWN, VXGE_HW_LINK_UP, VXGE_HW_MAC_HEADER_MAX_SIZE, VXGE_HW_MAC_MAX_MAC_PORT_ID, VXGE_HW_OK, VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_GET_MAX_PYLD_LEN, VXGE_HW_XGMAC_GEN_STATUS_VPMGMT_CLONE_XMACJ_NTWK_OK, and vxge_hw_vpmgmt_reg::xgmac_gen_status_vpmgmt_clone.

Referenced by __vxge_hw_vp_initialize().

◆ __vxge_hw_vpath_reset_check()

◆ __vxge_hw_vpath_reset()

enum vxge_hw_status __vxge_hw_vpath_reset ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1269 of file vxge_config.c.

1270{
1271 u64 val64;
1273
1274 vxge_trace();
1275
1276 val64 = VXGE_HW_CMN_RSTHDLR_CFG0_SW_RESET_VPATH(1 << (16 - vp_id));
1277
1279 &hldev->common_reg->cmn_rsthdlr_cfg0);
1280
1281 return status;
1282}
static void __vxge_hw_pio_mem_write32_upper(u32 val, void __iomem *addr)
#define VXGE_HW_CMN_RSTHDLR_CFG0_SW_RESET_VPATH(val)
Definition vxge_reg.h:763

References __vxge_hw_pio_mem_write32_upper(), vxge_hw_common_reg::cmn_rsthdlr_cfg0, __vxge_hw_device::common_reg, status, u32, vxge_bVALn, VXGE_HW_CMN_RSTHDLR_CFG0_SW_RESET_VPATH, VXGE_HW_OK, and vxge_trace.

Referenced by __vxge_hw_vp_initialize(), and vxge_hw_vpath_reset().

◆ __vxge_hw_vpath_prc_configure()

void __vxge_hw_vpath_prc_configure ( struct __vxge_hw_device * hldev)

Definition at line 1290 of file vxge_config.c.

1291{
1292 u64 val64;
1293 struct __vxge_hw_virtualpath *vpath;
1294 struct vxge_hw_vpath_reg __iomem *vp_reg;
1295
1296 vxge_trace();
1297
1298 vpath = &hldev->virtual_path;
1299 vp_reg = vpath->vp_reg;
1300
1301 val64 = readq(&vp_reg->prc_cfg1);
1303 writeq(val64, &vp_reg->prc_cfg1);
1304
1305 val64 = readq(&vpath->vp_reg->prc_cfg6);
1306 val64 &= ~VXGE_HW_PRC_CFG6_RXD_CRXDT(0x1ff);
1307 val64 &= ~VXGE_HW_PRC_CFG6_RXD_SPAT(0x1ff);
1309 val64 |= VXGE_HW_PRC_CFG6_RXD_CRXDT(0x3);
1310 val64 |= VXGE_HW_PRC_CFG6_RXD_SPAT(0xf);
1311 writeq(val64, &vpath->vp_reg->prc_cfg6);
1312
1314 (u64)virt_to_bus(vpath->ringh.rxdl) >> 3),
1315 &vp_reg->prc_cfg5);
1316
1317 val64 = readq(&vp_reg->prc_cfg4);
1318 val64 |= VXGE_HW_PRC_CFG4_IN_SVC;
1319 val64 &= ~VXGE_HW_PRC_CFG4_RING_MODE(0x3);
1323
1324 writeq(val64, &vp_reg->prc_cfg4);
1325 return;
1326}
struct __vxge_hw_ring ringh
#define VXGE_HW_PRC_CFG6_DOORBELL_MODE_EN
Definition vxge_reg.h:4082
#define VXGE_HW_PRC_CFG4_RING_MODE_ONE_BUFFER
Definition vxge_reg.h:139
#define VXGE_HW_PRC_CFG4_RING_MODE(val)
Definition vxge_reg.h:4069
#define VXGE_HW_PRC_CFG4_RTH_DISABLE
Definition vxge_reg.h:4072
#define VXGE_HW_PRC_CFG1_RTI_TINT_DISABLE
Definition vxge_reg.h:4060
#define VXGE_HW_PRC_CFG4_IN_SVC
Definition vxge_reg.h:4068
#define VXGE_HW_PRC_CFG6_RXD_CRXDT(val)
Definition vxge_reg.h:4085
#define VXGE_HW_PRC_CFG5_RXD0_ADD(val)
Definition vxge_reg.h:4078
#define VXGE_HW_PRC_CFG6_RXD_SPAT(val)
Definition vxge_reg.h:4087

References __iomem, vxge_hw_vpath_reg::prc_cfg1, vxge_hw_vpath_reg::prc_cfg4, vxge_hw_vpath_reg::prc_cfg5, vxge_hw_vpath_reg::prc_cfg6, readq, __vxge_hw_virtualpath::ringh, __vxge_hw_ring::rxdl, virt_to_bus(), __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_PRC_CFG1_RTI_TINT_DISABLE, VXGE_HW_PRC_CFG4_IN_SVC, VXGE_HW_PRC_CFG4_RING_MODE, VXGE_HW_PRC_CFG4_RING_MODE_ONE_BUFFER, VXGE_HW_PRC_CFG4_RTH_DISABLE, VXGE_HW_PRC_CFG5_RXD0_ADD, VXGE_HW_PRC_CFG6_DOORBELL_MODE_EN, VXGE_HW_PRC_CFG6_RXD_CRXDT, VXGE_HW_PRC_CFG6_RXD_SPAT, vxge_trace, and writeq.

Referenced by vxge_hw_vpath_open(), and vxge_hw_vpath_recover_from_reset().

◆ __vxge_hw_vpath_kdfc_configure()

enum vxge_hw_status __vxge_hw_vpath_kdfc_configure ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1334 of file vxge_config.c.

1335{
1336 u64 val64;
1337 u64 vpath_stride;
1339 struct __vxge_hw_virtualpath *vpath;
1340 struct vxge_hw_vpath_reg __iomem *vp_reg;
1341
1342 vxge_trace();
1343
1344 vpath = &hldev->virtual_path;
1345 vp_reg = vpath->vp_reg;
1347
1348 if (status != VXGE_HW_OK)
1349 goto exit;
1350
1351 val64 = readq(&vp_reg->kdfc_drbl_triplet_total);
1352
1353 vpath->max_kdfc_db =
1355 val64+1)/2;
1356
1357 vpath->max_nofl_db = vpath->max_kdfc_db;
1358
1360 (vpath->max_nofl_db*2)-1);
1361
1362 writeq(val64, &vp_reg->kdfc_fifo_trpl_partition);
1363
1365 &vp_reg->kdfc_fifo_trpl_ctrl);
1366
1367 val64 = readq(&vp_reg->kdfc_trpl_fifo_0_ctrl);
1368
1369 val64 &= ~(VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE(0x3) |
1371
1377
1378 writeq(val64, &vp_reg->kdfc_trpl_fifo_0_ctrl);
1380 wmb();
1381 vpath_stride = readq(&hldev->toc_reg->toc_kdfc_vpath_stride);
1382
1383 vpath->nofl_db =
1385 (hldev->kdfc + (vp_id *
1387 vpath_stride)));
1388exit:
1389 return status;
1390}
u64 toc_kdfc_vpath_stride
Definition vxge_reg.h:697
u64 kdfc_drbl_triplet_total
Definition vxge_reg.h:4167
u64 kdfc_trpl_fifo_0_wb_address
Definition vxge_reg.h:4157
u64 kdfc_fifo_trpl_partition
Definition vxge_reg.h:4116
enum vxge_hw_status __vxge_hw_kdfc_swapper_set(struct vxge_hw_legacy_reg __iomem *legacy_reg, struct vxge_hw_vpath_reg __iomem *vpath_reg)
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE(val)
Definition vxge_reg.h:4123
#define VXGE_HW_KDFC_DRBL_TRIPLET_TOTAL_GET_KDFC_MAX_SIZE(bits)
Definition vxge_reg.h:105
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE_NON_OFFLOAD_ONLY
Definition vxge_reg.h:109
#define VXGE_HW_TOC_KDFC_VPATH_STRIDE_GET_TOC_KDFC_VPATH_STRIDE(bits)
Definition vxge_reg.h:124
#define VXGE_HW_KDFC_FIFO_TRPL_CTRL_TRIPLET_ENABLE
Definition vxge_reg.h:4121
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SWAP_EN
Definition vxge_reg.h:4125
#define VXGE_HW_KDFC_FIFO_TRPL_PARTITION_LENGTH_0(val)
Definition vxge_reg.h:4117
#define VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SELECT(val)
Definition vxge_reg.h:4131

References __BIG_ENDIAN, __BYTE_ORDER, __iomem, __vxge_hw_kdfc_swapper_set(), __vxge_hw_device::kdfc, vxge_hw_vpath_reg::kdfc_drbl_triplet_total, vxge_hw_vpath_reg::kdfc_fifo_trpl_ctrl, vxge_hw_vpath_reg::kdfc_fifo_trpl_partition, vxge_hw_vpath_reg::kdfc_trpl_fifo_0_ctrl, vxge_hw_vpath_reg::kdfc_trpl_fifo_0_wb_address, __vxge_hw_device::legacy_reg, __vxge_hw_virtualpath::max_kdfc_db, __vxge_hw_virtualpath::max_nofl_db, __vxge_hw_virtualpath::nofl_db, readq, status, vxge_hw_toc_reg::toc_kdfc_vpath_stride, __vxge_hw_device::toc_reg, u32, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_KDFC_DRBL_TRIPLET_TOTAL_GET_KDFC_MAX_SIZE, VXGE_HW_KDFC_FIFO_TRPL_CTRL_TRIPLET_ENABLE, VXGE_HW_KDFC_FIFO_TRPL_PARTITION_LENGTH_0, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_MODE_NON_OFFLOAD_ONLY, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SELECT, VXGE_HW_KDFC_TRPL_FIFO_0_CTRL_SWAP_EN, VXGE_HW_OK, VXGE_HW_TOC_KDFC_VPATH_STRIDE_GET_TOC_KDFC_VPATH_STRIDE, vxge_trace, wmb, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_mac_configure()

enum vxge_hw_status __vxge_hw_vpath_mac_configure ( struct __vxge_hw_device * hldev)

Definition at line 1397 of file vxge_config.c.

1398{
1399 u64 val64;
1401 struct __vxge_hw_virtualpath *vpath;
1402 struct vxge_hw_vpath_reg __iomem *vp_reg;
1403
1404 vxge_trace();
1405
1406 vpath = &hldev->virtual_path;
1407 vp_reg = vpath->vp_reg;
1408
1410 vpath->vsport_number), &vp_reg->xmac_vsport_choice);
1411
1412 val64 = readq(&vp_reg->rxmac_vcfg1);
1413
1416
1417 writeq(val64, &vp_reg->rxmac_vcfg1);
1418 return status;
1419}
#define VXGE_HW_XMAC_VSPORT_CHOICE_VSPORT_NUMBER(val)
Definition vxge_reg.h:4224
#define VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_EN_MODE
Definition vxge_reg.h:4202
#define VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_BD_MODE(val)
Definition vxge_reg.h:4201

References __iomem, readq, vxge_hw_vpath_reg::rxmac_vcfg1, status, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, __vxge_hw_virtualpath::vsport_number, VXGE_HW_OK, VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_BD_MODE, VXGE_HW_RXMAC_VCFG1_RTS_RTH_MULTI_IT_EN_MODE, VXGE_HW_XMAC_VSPORT_CHOICE_VSPORT_NUMBER, vxge_trace, writeq, and vxge_hw_vpath_reg::xmac_vsport_choice.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_tim_configure()

enum vxge_hw_status __vxge_hw_vpath_tim_configure ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1427 of file vxge_config.c.

1428{
1429 u64 val64;
1431 struct __vxge_hw_virtualpath *vpath;
1432 struct vxge_hw_vpath_reg __iomem *vp_reg;
1433
1434 vxge_trace();
1435
1436 vpath = &hldev->virtual_path;
1437 vp_reg = vpath->vp_reg;
1438
1439 writeq((u64)0, &vp_reg->tim_dest_addr);
1440 writeq((u64)0, &vp_reg->tim_vpath_map);
1441 writeq((u64)0, &vp_reg->tim_bitmap);
1442 writeq((u64)0, &vp_reg->tim_remap);
1443
1445 (vp_id * VXGE_HW_MAX_INTR_PER_VP) +
1447
1448 val64 = readq(&vp_reg->tim_pci_cfg);
1450 writeq(val64, &vp_reg->tim_pci_cfg);
1451
1452 /* TX configuration */
1454 (VXGE_TTI_BTIMER_VAL * 1000) / 272);
1462
1468
1472 (VXGE_TTI_LTIMER_VAL * 1000) / 272);
1474
1475 /* RX configuration */
1477 (VXGE_RTI_BTIMER_VAL * 1000) / 272);
1483
1489
1493 (VXGE_RTI_LTIMER_VAL * 1000) / 272);
1495
1496 val64 = 0;
1503
1504 return status;
1505}
u64 tim_cfg3_int_num[4]
Definition vxge_reg.h:4301
u64 tim_cfg1_int_num[4]
Definition vxge_reg.h:4286
u64 tim_cfg2_int_num[4]
Definition vxge_reg.h:4296
#define RTI_RX_UFC_C
Definition vxge_main.h:120
#define VXGE_TTI_LTIMER_VAL
Definition vxge_main.h:77
#define TTI_TX_URANGE_B
Definition vxge_main.h:94
#define TTI_TX_URANGE_C
Definition vxge_main.h:95
#define TTI_TX_UFC_A
Definition vxge_main.h:96
#define RTI_RX_UFC_B
Definition vxge_main.h:119
#define TTI_TX_URANGE_A
Definition vxge_main.h:93
#define TTI_TX_UFC_C
Definition vxge_main.h:98
#define VXGE_RTI_BTIMER_VAL
Definition vxge_main.h:79
#define VXGE_RTI_LTIMER_VAL
Definition vxge_main.h:80
#define RTI_RX_UFC_A
Definition vxge_main.h:118
#define RTI_RX_URANGE_C
Definition vxge_main.h:114
#define RTI_RX_UFC_D
Definition vxge_main.h:121
#define TTI_TX_UFC_D
Definition vxge_main.h:99
#define TTI_TX_UFC_B
Definition vxge_main.h:97
#define RTI_RX_URANGE_A
Definition vxge_main.h:112
#define RTI_RX_URANGE_B
Definition vxge_main.h:113
#define VXGE_TTI_BTIMER_VAL
Definition vxge_main.h:73
#define VXGE_HW_TIM_CFG3_INT_NUM_UTIL_SEL(val)
Definition vxge_reg.h:4305
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_A(val)
Definition vxge_reg.h:4297
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_C(val)
Definition vxge_reg.h:4299
#define VXGE_HW_TIM_CFG1_INT_NUM_URNG_A(val)
Definition vxge_reg.h:4293
#define VXGE_HW_TIM_CFG1_INT_NUM_TIMER_AC
Definition vxge_reg.h:4291
#define VXGE_HW_TIM_CFG1_INT_NUM_TXFRM_CNT_EN
Definition vxge_reg.h:4289
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_B(val)
Definition vxge_reg.h:4298
#define VXGE_HW_TIM_CFG1_INT_NUM_TIMER_CI
Definition vxge_reg.h:4292
#define VXGE_HW_TIM_RING_ASSN_INT_NUM(val)
Definition vxge_reg.h:4319
#define VXGE_HW_TIM_CFG2_INT_NUM_UEC_D(val)
Definition vxge_reg.h:4300
#define VXGE_HW_TIM_CFG3_INT_NUM_LTIMER_VAL(val)
Definition vxge_reg.h:4306
#define VXGE_HW_TIM_CFG1_INT_NUM_URNG_B(val)
Definition vxge_reg.h:4294
#define VXGE_HW_TIM_CFG1_INT_NUM_URNG_C(val)
Definition vxge_reg.h:4295
#define VXGE_HW_TIM_PCI_CFG_ADD_PAD
Definition vxge_reg.h:4328
#define VXGE_HW_TIM_CFG1_INT_NUM_BTIMER_VAL(val)
Definition vxge_reg.h:4287
#define VXGE_HW_VPATH_INTR_BMAP
#define VXGE_HW_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL
#define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL
#define VXGE_HW_VPATH_INTR_EINTA
#define VXGE_HW_VPATH_INTR_RX

References __iomem, readq, RTI_RX_UFC_A, RTI_RX_UFC_B, RTI_RX_UFC_C, RTI_RX_UFC_D, RTI_RX_URANGE_A, RTI_RX_URANGE_B, RTI_RX_URANGE_C, status, vxge_hw_vpath_reg::tim_bitmap, vxge_hw_vpath_reg::tim_cfg1_int_num, vxge_hw_vpath_reg::tim_cfg2_int_num, vxge_hw_vpath_reg::tim_cfg3_int_num, vxge_hw_vpath_reg::tim_dest_addr, vxge_hw_vpath_reg::tim_pci_cfg, vxge_hw_vpath_reg::tim_remap, vxge_hw_vpath_reg::tim_ring_assn, vxge_hw_vpath_reg::tim_vpath_map, TTI_TX_UFC_A, TTI_TX_UFC_B, TTI_TX_UFC_C, TTI_TX_UFC_D, TTI_TX_URANGE_A, TTI_TX_URANGE_B, TTI_TX_URANGE_C, u32, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, VXGE_HW_MAX_INTR_PER_VP, VXGE_HW_OK, VXGE_HW_TIM_CFG1_INT_NUM_BTIMER_VAL, VXGE_HW_TIM_CFG1_INT_NUM_TIMER_AC, VXGE_HW_TIM_CFG1_INT_NUM_TIMER_CI, VXGE_HW_TIM_CFG1_INT_NUM_TXFRM_CNT_EN, VXGE_HW_TIM_CFG1_INT_NUM_URNG_A, VXGE_HW_TIM_CFG1_INT_NUM_URNG_B, VXGE_HW_TIM_CFG1_INT_NUM_URNG_C, VXGE_HW_TIM_CFG2_INT_NUM_UEC_A, VXGE_HW_TIM_CFG2_INT_NUM_UEC_B, VXGE_HW_TIM_CFG2_INT_NUM_UEC_C, VXGE_HW_TIM_CFG2_INT_NUM_UEC_D, VXGE_HW_TIM_CFG3_INT_NUM_LTIMER_VAL, VXGE_HW_TIM_CFG3_INT_NUM_UTIL_SEL, VXGE_HW_TIM_PCI_CFG_ADD_PAD, VXGE_HW_TIM_RING_ASSN_INT_NUM, VXGE_HW_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL, VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL, VXGE_HW_VPATH_INTR_BMAP, VXGE_HW_VPATH_INTR_EINTA, VXGE_HW_VPATH_INTR_RX, VXGE_HW_VPATH_INTR_TX, VXGE_RTI_BTIMER_VAL, VXGE_RTI_LTIMER_VAL, vxge_trace, VXGE_TTI_BTIMER_VAL, VXGE_TTI_LTIMER_VAL, and writeq.

Referenced by __vxge_hw_vpath_initialize().

◆ __vxge_hw_vpath_initialize()

enum vxge_hw_status __vxge_hw_vpath_initialize ( struct __vxge_hw_device * hldev,
u32 vp_id )

Definition at line 1513 of file vxge_config.c.

1514{
1515 u64 val64;
1516 u32 val32;
1517 int i;
1519 struct __vxge_hw_virtualpath *vpath;
1520 struct vxge_hw_vpath_reg *vp_reg;
1521
1522 vxge_trace();
1523
1524 vpath = &hldev->virtual_path;
1525
1526 if (!(hldev->vpath_assignments & vxge_mBIT(vp_id))) {
1528 goto exit;
1529 }
1530 vp_reg = vpath->vp_reg;
1532 if (status != VXGE_HW_OK)
1533 goto exit;
1534
1536
1537 if (status != VXGE_HW_OK)
1538 goto exit;
1539 val64 = readq(&vpath->vpmgmt_reg->xmac_vsport_choices_vp);
1540
1541 for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
1542 if (val64 & vxge_mBIT(i))
1543 vpath->vsport_number = i;
1544 }
1545
1547
1548 if (status != VXGE_HW_OK)
1549 goto exit;
1550
1551 status = __vxge_hw_vpath_kdfc_configure(hldev, vp_id);
1552
1553 if (status != VXGE_HW_OK)
1554 goto exit;
1555
1556 status = __vxge_hw_vpath_tim_configure(hldev, vp_id);
1557
1558 if (status != VXGE_HW_OK)
1559 goto exit;
1560
1561 val64 = readq(&vp_reg->rtdma_rd_optimization_ctrl);
1562
1563 /* Get MRRS value from device control */
1564 status = __vxge_hw_vpath_pci_read(vpath, 1, 0x78, &val32);
1565
1566 if (status == VXGE_HW_OK) {
1567 val32 = (val32 & VXGE_HW_PCI_EXP_DEVCTL_READRQ) >> 12;
1568 val64 &=
1570 val64 |=
1572
1574 }
1575
1577 val64 |=
1580
1582 writeq(val64, &vp_reg->rtdma_rd_optimization_ctrl);
1583
1584exit:
1585 return status;
1586}
u64 rtdma_rd_optimization_ctrl
Definition vxge_reg.h:4259
enum vxge_hw_status __vxge_hw_vpath_mac_configure(struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_vpath_pci_read(struct __vxge_hw_virtualpath *vpath, u32 phy_func_0, u32 offset, u32 *val)
enum vxge_hw_status __vxge_hw_vpath_tim_configure(struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_kdfc_configure(struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_swapper_set(struct vxge_hw_vpath_reg __iomem *vpath_reg)
#define VXGE_HW_MAX_PAYLOAD_SIZE_512
Definition vxge_config.h:68
@ VXGE_HW_ERR_VPATH_NOT_AVAILABLE
Definition vxge_config.h:86
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY_EN
Definition vxge_reg.h:4270
#define VXGE_HW_PCI_EXP_DEVCTL_READRQ
Definition vxge_reg.h:4264
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY(val)
Definition vxge_reg.h:4271
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_FILL_THRESH(val)
Definition vxge_reg.h:4265
#define VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_WAIT_FOR_SPACE
Definition vxge_reg.h:4263

References __vxge_hw_legacy_swapper_set(), __vxge_hw_vpath_kdfc_configure(), __vxge_hw_vpath_mac_configure(), __vxge_hw_vpath_pci_read(), __vxge_hw_vpath_swapper_set(), __vxge_hw_vpath_tim_configure(), __vxge_hw_device::legacy_reg, readq, vxge_hw_vpath_reg::rtdma_rd_optimization_ctrl, status, u32, __vxge_hw_device::virtual_path, __vxge_hw_virtualpath::vp_reg, __vxge_hw_device::vpath_assignments, __vxge_hw_virtualpath::vpmgmt_reg, __vxge_hw_virtualpath::vsport_number, VXGE_HW_ERR_VPATH_NOT_AVAILABLE, VXGE_HW_MAX_PAYLOAD_SIZE_512, VXGE_HW_MAX_VIRTUAL_PATHS, VXGE_HW_OK, VXGE_HW_PCI_EXP_DEVCTL_READRQ, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_ADDR_BDRY_EN, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_FILL_THRESH, VXGE_HW_RTDMA_RD_OPTIMIZATION_CTRL_FB_WAIT_FOR_SPACE, vxge_mBIT, vxge_trace, writeq, and vxge_hw_vpmgmt_reg::xmac_vsport_choices_vp.

Referenced by __vxge_hw_vp_initialize(), and vxge_hw_vpath_recover_from_reset().

◆ __vxge_hw_vp_initialize()

enum vxge_hw_status __vxge_hw_vp_initialize ( struct __vxge_hw_device * hldev,
u32 vp_id,
struct __vxge_hw_virtualpath * vpath )

Definition at line 1594 of file vxge_config.c.

1596{
1598
1599 vxge_trace();
1600
1601 if (!(hldev->vpath_assignments & vxge_mBIT(vp_id))) {
1603 goto exit;
1604 }
1605
1606 vpath->vp_id = vp_id;
1607 vpath->vp_open = VXGE_HW_VP_OPEN;
1608 vpath->hldev = hldev;
1609 vpath->vp_reg = hldev->vpath_reg[vp_id];
1610 vpath->vpmgmt_reg = hldev->vpmgmt_reg[vp_id];
1611
1612 __vxge_hw_vpath_reset(hldev, vp_id);
1613
1615 if (status != VXGE_HW_OK) {
1616 memset(vpath, 0, sizeof(struct __vxge_hw_virtualpath));
1617 goto exit;
1618 }
1619
1621 hldev->tim_int_mask1, vp_id);
1622
1623 status = __vxge_hw_vpath_initialize(hldev, vp_id);
1624
1625 if (status != VXGE_HW_OK) {
1626 __vxge_hw_vp_terminate(hldev, vpath);
1627 goto exit;
1628 }
1629
1631exit:
1632 return status;
1633}
enum vxge_hw_status __vxge_hw_vpath_reset(struct __vxge_hw_device *hldev, u32 vp_id)
enum vxge_hw_status __vxge_hw_vpath_reset_check(struct __vxge_hw_virtualpath *vpath)
void __vxge_hw_vp_terminate(struct __vxge_hw_device *hldev, struct __vxge_hw_virtualpath *vpath)
static enum vxge_hw_status __vxge_hw_vpath_mgmt_read(struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_vpath_initialize(struct __vxge_hw_device *hldev, u32 vp_id)
#define VXGE_HW_DEVICE_TIM_INT_MASK_SET(m0, m1, i)
#define VXGE_HW_VP_OPEN

References __vxge_hw_vp_terminate(), __vxge_hw_vpath_initialize(), __vxge_hw_vpath_mgmt_read(), __vxge_hw_vpath_reset(), __vxge_hw_vpath_reset_check(), __vxge_hw_virtualpath::hldev, memset(), status, __vxge_hw_device::tim_int_mask0, __vxge_hw_device::tim_int_mask1, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, __vxge_hw_virtualpath::vp_reg, __vxge_hw_device::vpath_assignments, __vxge_hw_device::vpath_reg, __vxge_hw_device::vpmgmt_reg, __vxge_hw_virtualpath::vpmgmt_reg, VXGE_HW_DEVICE_TIM_INT_MASK_SET, VXGE_HW_ERR_VPATH_NOT_AVAILABLE, VXGE_HW_OK, VXGE_HW_VP_OPEN, vxge_mBIT, and vxge_trace.

Referenced by vxge_hw_vpath_open().

◆ __vxge_hw_vp_terminate()

void __vxge_hw_vp_terminate ( struct __vxge_hw_device * hldev,
struct __vxge_hw_virtualpath * vpath )

Definition at line 1640 of file vxge_config.c.

1642{
1643 vxge_trace();
1644
1645 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN)
1646 return;
1647
1649 hldev->tim_int_mask1, vpath->vp_id);
1650
1651 memset(vpath, 0, sizeof(struct __vxge_hw_virtualpath));
1652}
#define VXGE_HW_DEVICE_TIM_INT_MASK_RESET(m0, m1, i)
#define VXGE_HW_VP_NOT_OPEN

References memset(), __vxge_hw_device::tim_int_mask0, __vxge_hw_device::tim_int_mask1, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, VXGE_HW_DEVICE_TIM_INT_MASK_RESET, VXGE_HW_VP_NOT_OPEN, and vxge_trace.

Referenced by __vxge_hw_vp_initialize(), vxge_hw_vpath_close(), and vxge_hw_vpath_open().

◆ vxge_hw_vpath_mtu_set()

enum vxge_hw_status vxge_hw_vpath_mtu_set ( struct __vxge_hw_virtualpath * vpath,
u32 new_mtu )

Definition at line 1660 of file vxge_config.c.

1661{
1662 u64 val64;
1664
1665 vxge_trace();
1666
1667 new_mtu += VXGE_HW_MAC_HEADER_MAX_SIZE;
1668
1669 if ((new_mtu < VXGE_HW_MIN_MTU) || (new_mtu > vpath->max_mtu))
1671
1672 val64 = readq(&vpath->vp_reg->rxmac_vcfg0);
1673
1674 val64 &= ~VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN(0x3fff);
1675 val64 |= VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN(new_mtu);
1676
1677 writeq(val64, &vpath->vp_reg->rxmac_vcfg0);
1678
1679 return status;
1680}
#define VXGE_HW_MIN_MTU
Definition vxge_config.h:34
@ VXGE_HW_ERR_INVALID_MTU_SIZE
Definition vxge_config.h:90

References __vxge_hw_virtualpath::max_mtu, readq, vxge_hw_vpath_reg::rxmac_vcfg0, status, u32, __vxge_hw_virtualpath::vp_reg, VXGE_HW_ERR_INVALID_MTU_SIZE, VXGE_HW_MAC_HEADER_MAX_SIZE, VXGE_HW_MIN_MTU, VXGE_HW_OK, VXGE_HW_RXMAC_VCFG0_RTS_MAX_FRM_LEN, vxge_trace, and writeq.

Referenced by vxge_open().

◆ vxge_hw_vpath_open()

enum vxge_hw_status vxge_hw_vpath_open ( struct __vxge_hw_device * hldev,
struct vxge_vpath * vpath )

Definition at line 1689 of file vxge_config.c.

1690{
1691 struct __vxge_hw_virtualpath *vpathh;
1693
1694 vxge_trace();
1695
1696 vpathh = &hldev->virtual_path;
1697
1698 if (vpath->vp_open == VXGE_HW_VP_OPEN) {
1700 goto vpath_open_exit1;
1701 }
1702
1704 if (status != VXGE_HW_OK)
1705 goto vpath_open_exit1;
1706
1707 status = __vxge_hw_fifo_create(vpathh, &vpathh->fifoh);
1708 if (status != VXGE_HW_OK)
1709 goto vpath_open_exit2;
1710
1711 status = __vxge_hw_ring_create(vpathh, &vpathh->ringh);
1712 if (status != VXGE_HW_OK)
1713 goto vpath_open_exit3;
1714
1716
1717 return VXGE_HW_OK;
1718
1719vpath_open_exit3:
1720 __vxge_hw_fifo_delete(&vpathh->fifoh);
1721vpath_open_exit2:
1723vpath_open_exit1:
1724 return status;
1725}
struct __vxge_hw_fifo fifoh
enum vxge_hw_status __vxge_hw_fifo_delete(struct __vxge_hw_fifo *fifo)
void __vxge_hw_vpath_prc_configure(struct __vxge_hw_device *hldev)
enum vxge_hw_status __vxge_hw_fifo_create(struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_fifo *fifo)
enum vxge_hw_status __vxge_hw_vp_initialize(struct __vxge_hw_device *hldev, u32 vp_id, struct __vxge_hw_virtualpath *vpath)
enum vxge_hw_status __vxge_hw_ring_create(struct __vxge_hw_virtualpath *vpath, struct __vxge_hw_ring *ring)
@ VXGE_HW_ERR_INVALID_STATE
Definition vxge_config.h:99

References __vxge_hw_fifo_create(), __vxge_hw_fifo_delete(), __vxge_hw_ring_create(), __vxge_hw_vp_initialize(), __vxge_hw_vp_terminate(), __vxge_hw_vpath_prc_configure(), __vxge_hw_virtualpath::fifoh, __vxge_hw_device::first_vp_id, __vxge_hw_virtualpath::hldev, __vxge_hw_virtualpath::ringh, status, __vxge_hw_device::virtual_path, vxge_vpath::vp_open, VXGE_HW_ERR_INVALID_STATE, VXGE_HW_OK, VXGE_HW_VP_OPEN, and vxge_trace.

Referenced by vxge_open_vpaths().

◆ vxge_hw_vpath_rx_doorbell_init()

void vxge_hw_vpath_rx_doorbell_init ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1736 of file vxge_config.c.

1737{
1738 u64 new_count, val64;
1739
1740 vxge_trace();
1741
1742 if (vpath->hldev->titan1) {
1743 new_count = readq(&vpath->vp_reg->rxdmem_size);
1744 new_count &= 0x1fff;
1745 } else
1746 new_count = VXGE_HW_RING_RXD_QWORDS_MODE_1 * 4;
1747
1748 val64 = (VXGE_HW_RXDMEM_SIZE_PRC_RXDMEM_SIZE(new_count));
1749
1751 &vpath->vp_reg->prc_rxd_doorbell);
1752}
#define VXGE_HW_RING_RXD_QWORDS_MODE_1
#define VXGE_HW_PRC_RXD_DOORBELL_NEW_QW_CNT(val)
Definition vxge_reg.h:4099
#define VXGE_HW_RXDMEM_SIZE_PRC_RXDMEM_SIZE(val)
Definition vxge_reg.h:4103

References __vxge_hw_virtualpath::hldev, vxge_hw_vpath_reg::prc_rxd_doorbell, readq, vxge_hw_vpath_reg::rxdmem_size, __vxge_hw_device::titan1, __vxge_hw_virtualpath::vp_reg, VXGE_HW_PRC_RXD_DOORBELL_NEW_QW_CNT, VXGE_HW_RING_RXD_QWORDS_MODE_1, VXGE_HW_RXDMEM_SIZE_PRC_RXDMEM_SIZE, vxge_trace, and writeq.

Referenced by vxge_open().

◆ vxge_hw_vpath_close()

enum vxge_hw_status vxge_hw_vpath_close ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1759 of file vxge_config.c.

1760{
1761 struct __vxge_hw_device *devh = NULL;
1762 u32 vp_id = vpath->vp_id;
1764
1765 vxge_trace();
1766
1767 devh = vpath->hldev;
1768
1769 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN) {
1771 goto vpath_close_exit;
1772 }
1773
1774 devh->vpaths_deployed &= ~vxge_mBIT(vp_id);
1775
1777
1779
1780 __vxge_hw_vp_terminate(devh, vpath);
1781
1783
1784vpath_close_exit:
1785 return status;
1786}
@ VXGE_HW_ERR_VPATH_NOT_OPEN
Definition vxge_config.h:87

References __vxge_hw_fifo_delete(), __vxge_hw_ring_delete(), __vxge_hw_vp_terminate(), __vxge_hw_virtualpath::fifoh, __vxge_hw_virtualpath::hldev, NULL, __vxge_hw_virtualpath::ringh, status, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, __vxge_hw_device::vpaths_deployed, VXGE_HW_ERR_VPATH_NOT_OPEN, VXGE_HW_OK, VXGE_HW_VP_NOT_OPEN, vxge_mBIT, and vxge_trace.

Referenced by vxge_close_vpaths().

◆ vxge_hw_vpath_reset()

enum vxge_hw_status vxge_hw_vpath_reset ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1792 of file vxge_config.c.

1793{
1795 u32 vp_id;
1796
1797 vxge_trace();
1798
1799 vp_id = vpath->vp_id;
1800
1801 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN) {
1803 goto exit;
1804 }
1805
1806 status = __vxge_hw_vpath_reset(vpath->hldev, vp_id);
1807exit:
1808 return status;
1809}

References __vxge_hw_vpath_reset(), __vxge_hw_virtualpath::hldev, status, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, VXGE_HW_ERR_VPATH_NOT_OPEN, VXGE_HW_VP_NOT_OPEN, and vxge_trace.

Referenced by vxge_reset_all_vpaths().

◆ vxge_hw_vpath_recover_from_reset()

enum vxge_hw_status vxge_hw_vpath_recover_from_reset ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1817 of file vxge_config.c.

1818{
1820 struct __vxge_hw_device *hldev;
1821 u32 vp_id;
1822
1823 vxge_trace();
1824
1825 vp_id = vpath->vp_id;
1826 hldev = vpath->hldev;
1827
1828 if (vpath->vp_open == VXGE_HW_VP_NOT_OPEN) {
1830 goto exit;
1831 }
1832
1834 if (status != VXGE_HW_OK)
1835 goto exit;
1836
1837 status = __vxge_hw_vpath_initialize(hldev, vp_id);
1838 if (status != VXGE_HW_OK)
1839 goto exit;
1840
1842
1843exit:
1844 return status;
1845}

References __vxge_hw_vpath_initialize(), __vxge_hw_vpath_prc_configure(), __vxge_hw_vpath_reset_check(), __vxge_hw_virtualpath::hldev, status, u32, __vxge_hw_virtualpath::vp_id, __vxge_hw_virtualpath::vp_open, VXGE_HW_ERR_VPATH_NOT_OPEN, VXGE_HW_OK, VXGE_HW_VP_NOT_OPEN, and vxge_trace.

Referenced by vxge_reset_all_vpaths().

◆ vxge_hw_vpath_enable()

void vxge_hw_vpath_enable ( struct __vxge_hw_virtualpath * vpath)

Definition at line 1853 of file vxge_config.c.

1854{
1855 struct __vxge_hw_device *hldev;
1856 u64 val64;
1857
1858 vxge_trace();
1859
1860 hldev = vpath->hldev;
1861
1863 1 << (16 - vpath->vp_id));
1864
1866 &hldev->common_reg->cmn_rsthdlr_cfg1);
1867}
#define VXGE_HW_CMN_RSTHDLR_CFG1_CLR_VPATH_RESET(val)
Definition vxge_reg.h:765

References __vxge_hw_pio_mem_write32_upper(), vxge_hw_common_reg::cmn_rsthdlr_cfg1, __vxge_hw_device::common_reg, __vxge_hw_virtualpath::hldev, u32, __vxge_hw_virtualpath::vp_id, vxge_bVALn, VXGE_HW_CMN_RSTHDLR_CFG1_CLR_VPATH_RESET, and vxge_trace.

Referenced by vxge_open().