Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.5-rc1 125 lines 4.0 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Intel MIC Platform Software Stack (MPSS) 4 * 5 * Copyright(c) 2015 Intel Corporation. 6 * 7 * Intel MIC COSM Bus Driver 8 */ 9#ifndef _COSM_BUS_H_ 10#define _COSM_BUS_H_ 11 12#include <linux/scif.h> 13#include <linux/mic_common.h> 14#include "../common/mic_dev.h" 15 16/** 17 * cosm_device - representation of a cosm device 18 * 19 * @attr_group: Pointer to list of sysfs attribute groups. 20 * @sdev: Device for sysfs entries. 21 * @state: MIC state. 22 * @prev_state: MIC state previous to MIC_RESETTING 23 * @shutdown_status: MIC status reported by card for shutdown/crashes. 24 * @shutdown_status_int: Internal shutdown status maintained by the driver 25 * @cosm_mutex: Mutex for synchronizing access to data structures. 26 * @reset_trigger_work: Work for triggering reset requests. 27 * @scif_work: Work for handling per device SCIF connections 28 * @cmdline: Kernel command line. 29 * @firmware: Firmware file name. 30 * @ramdisk: Ramdisk file name. 31 * @bootmode: Boot mode i.e. "linux" or "elf" for flash updates. 32 * @log_buf_addr: Log buffer address for MIC. 33 * @log_buf_len: Log buffer length address for MIC. 34 * @state_sysfs: Sysfs dirent for notifying ring 3 about MIC state changes. 35 * @hw_ops: the hardware bus ops for this device. 36 * @dev: underlying device. 37 * @index: unique position on the cosm bus 38 * @dbg_dir: debug fs directory 39 * @newepd: new endpoint from scif accept to be assigned to this cdev 40 * @epd: SCIF endpoint for this cdev 41 * @heartbeat_watchdog_enable: if heartbeat watchdog is enabled for this cdev 42 * @sysfs_heartbeat_enable: sysfs setting for disabling heartbeat notification 43 */ 44struct cosm_device { 45 const struct attribute_group **attr_group; 46 struct device *sdev; 47 u8 state; 48 u8 prev_state; 49 u8 shutdown_status; 50 u8 shutdown_status_int; 51 struct mutex cosm_mutex; 52 struct work_struct reset_trigger_work; 53 struct work_struct scif_work; 54 char *cmdline; 55 char *firmware; 56 char *ramdisk; 57 char *bootmode; 58 void *log_buf_addr; 59 int *log_buf_len; 60 struct kernfs_node *state_sysfs; 61 struct cosm_hw_ops *hw_ops; 62 struct device dev; 63 int index; 64 struct dentry *dbg_dir; 65 scif_epd_t newepd; 66 scif_epd_t epd; 67 bool heartbeat_watchdog_enable; 68 bool sysfs_heartbeat_enable; 69}; 70 71/** 72 * cosm_driver - operations for a cosm driver 73 * 74 * @driver: underlying device driver (populate name and owner). 75 * @probe: the function to call when a device is found. Returns 0 or -errno. 76 * @remove: the function to call when a device is removed. 77 */ 78struct cosm_driver { 79 struct device_driver driver; 80 int (*probe)(struct cosm_device *dev); 81 void (*remove)(struct cosm_device *dev); 82}; 83 84/** 85 * cosm_hw_ops - cosm bus ops 86 * 87 * @reset: trigger MIC reset 88 * @force_reset: force MIC reset 89 * @post_reset: inform MIC reset is complete 90 * @ready: is MIC ready for OS download 91 * @start: boot MIC 92 * @stop: prepare MIC for reset 93 * @family: return MIC HW family string 94 * @stepping: return MIC HW stepping string 95 * @aper: return MIC PCIe aperture 96 */ 97struct cosm_hw_ops { 98 void (*reset)(struct cosm_device *cdev); 99 void (*force_reset)(struct cosm_device *cdev); 100 void (*post_reset)(struct cosm_device *cdev, enum mic_states state); 101 bool (*ready)(struct cosm_device *cdev); 102 int (*start)(struct cosm_device *cdev, int id); 103 void (*stop)(struct cosm_device *cdev, bool force); 104 ssize_t (*family)(struct cosm_device *cdev, char *buf); 105 ssize_t (*stepping)(struct cosm_device *cdev, char *buf); 106 struct mic_mw *(*aper)(struct cosm_device *cdev); 107}; 108 109struct cosm_device * 110cosm_register_device(struct device *pdev, struct cosm_hw_ops *hw_ops); 111void cosm_unregister_device(struct cosm_device *dev); 112int cosm_register_driver(struct cosm_driver *drv); 113void cosm_unregister_driver(struct cosm_driver *drv); 114struct cosm_device *cosm_find_cdev_by_id(int id); 115 116static inline struct cosm_device *dev_to_cosm(struct device *dev) 117{ 118 return container_of(dev, struct cosm_device, dev); 119} 120 121static inline struct cosm_driver *drv_to_cosm(struct device_driver *drv) 122{ 123 return container_of(drv, struct cosm_driver, driver); 124} 125#endif /* _COSM_BUS_H */