/* * PCI-specific Target state * * NOTE: Structure is shared between Host software and Target firmware! * * Much of this may be of interest to the Host so * HOST_INTEREST->hi_interconnect_state points here * (and all members are 32-bit quantities in order to * facilitate Host access). In particular, Host software is * required to initialize pipe_cfg_addr and svc_to_pipe_map.
*/ struct pcie_state { /* Pipe configuration Target address */ /* NB: ce_pipe_config[CE_COUNT] */
u32 pipe_cfg_addr;
/* Service to pipe map Target address */ /* NB: service_to_pipe[PIPE_TO_CE_MAP_CN] */
u32 svc_to_pipe_map;
/* number of MSI interrupts requested */
u32 msi_requested;
/* number of MSI interrupts granted */
u32 msi_granted;
/* Due to HW quirks it is recommended to disable ASPM during device * bootup. To do that the original PCI-E Link Control is stored before * device bootup is executed and re-programmed later.
*/
u16 link_ctl;
/* Protects ps_awake and ps_wake_refcount */
spinlock_t ps_lock;
/* The device has a special powersave-oriented register. When device is * considered asleep it drains less power and driver is forbidden from * accessing most MMIO registers. If host were to access them without * waking up the device might scribble over host memory or return * 0xdeadbeef readouts.
*/ unsignedlong ps_wake_refcount;
/* Waking up takes some time (up to 2ms in some cases) so it can be bad * for latency. To mitigate this the device isn't immediately allowed * to sleep after all references are undone - instead there's a grace * period after which the powersave register is updated unless some * activity to/from device happened in the meantime. * * Also see comments on ATH10K_PCI_SLEEP_GRACE_PERIOD_MSEC.
*/ struct timer_list ps_timer;
/* MMIO registers are used to communicate with the device. With * intensive traffic accessing powersave register would be a bit * wasteful overhead and would needlessly stall CPU. It is far more * efficient to rely on a variable in RAM and update it only upon * powersave register state changes.
*/ bool ps_awake;
/* pci power save, disable for QCA988X and QCA99X0. * Writing 'false' to this variable avoids frequent locking * on MMIO read/write.
*/ bool pci_ps;
/* Chip specific pci reset routine used to do a safe reset */ int (*pci_soft_reset)(struct ath10k *ar);
/* Chip specific pci full reset function */ int (*pci_hard_reset)(struct ath10k *ar);
/* chip specific methods for converting target CPU virtual address * space to CE address space
*/
u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr);
/* Keep this entry in the last, memory for struct ath10k_ahb is * allocated (ahb support enabled case) in the continuation of * this struct.
*/ struct ath10k_ahb ahb[];
/* Wait up to this many Ms for a Diagnostic Access CE operation to complete */ #define DIAG_ACCESS_CE_TIMEOUT_US 10000 /* 10 ms */ #define DIAG_ACCESS_CE_WAIT_US 50
/* QCA6174 is known to have Tx/Rx issues when SOC_WAKE register is poked too * frequently. To avoid this put SoC to sleep after a very conservative grace * period. Adjust with great care.
*/ #define ATH10K_PCI_SLEEP_GRACE_PERIOD_MSEC 60
#endif/* _PCI_H_ */
Messung V0.5
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.