|
|
@@ -0,0 +1,134 @@
|
|
|
+/*
|
|
|
+ * Intel MIC Platform Software Stack (MPSS)
|
|
|
+ *
|
|
|
+ * Copyright(c) 2015 Intel Corporation.
|
|
|
+ *
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU General Public License, version 2, as
|
|
|
+ * published by the Free Software Foundation.
|
|
|
+ *
|
|
|
+ * This program is distributed in the hope that it will be useful, but
|
|
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
+ * General Public License for more details.
|
|
|
+ *
|
|
|
+ * The full GNU General Public License is included in this distribution in
|
|
|
+ * the file called "COPYING".
|
|
|
+ *
|
|
|
+ * Intel MIC COSM Bus Driver
|
|
|
+ */
|
|
|
+#ifndef _COSM_BUS_H_
|
|
|
+#define _COSM_BUS_H_
|
|
|
+
|
|
|
+#include <linux/scif.h>
|
|
|
+#include <linux/mic_common.h>
|
|
|
+#include "../common/mic_dev.h"
|
|
|
+
|
|
|
+/**
|
|
|
+ * cosm_device - representation of a cosm device
|
|
|
+ *
|
|
|
+ * @attr_group: Pointer to list of sysfs attribute groups.
|
|
|
+ * @sdev: Device for sysfs entries.
|
|
|
+ * @state: MIC state.
|
|
|
+ * @shutdown_status: MIC status reported by card for shutdown/crashes.
|
|
|
+ * @shutdown_status_int: Internal shutdown status maintained by the driver
|
|
|
+ * @cosm_mutex: Mutex for synchronizing access to data structures.
|
|
|
+ * @reset_trigger_work: Work for triggering reset requests.
|
|
|
+ * @scif_work: Work for handling per device SCIF connections
|
|
|
+ * @cmdline: Kernel command line.
|
|
|
+ * @firmware: Firmware file name.
|
|
|
+ * @ramdisk: Ramdisk file name.
|
|
|
+ * @bootmode: Boot mode i.e. "linux" or "elf" for flash updates.
|
|
|
+ * @log_buf_addr: Log buffer address for MIC.
|
|
|
+ * @log_buf_len: Log buffer length address for MIC.
|
|
|
+ * @state_sysfs: Sysfs dirent for notifying ring 3 about MIC state changes.
|
|
|
+ * @hw_ops: the hardware bus ops for this device.
|
|
|
+ * @dev: underlying device.
|
|
|
+ * @index: unique position on the cosm bus
|
|
|
+ * @dbg_dir: debug fs directory
|
|
|
+ * @newepd: new endpoint from scif accept to be assigned to this cdev
|
|
|
+ * @epd: SCIF endpoint for this cdev
|
|
|
+ * @heartbeat_watchdog_enable: if heartbeat watchdog is enabled for this cdev
|
|
|
+ * @sysfs_heartbeat_enable: sysfs setting for disabling heartbeat notification
|
|
|
+ */
|
|
|
+struct cosm_device {
|
|
|
+ const struct attribute_group **attr_group;
|
|
|
+ struct device *sdev;
|
|
|
+ u8 state;
|
|
|
+ u8 shutdown_status;
|
|
|
+ u8 shutdown_status_int;
|
|
|
+ struct mutex cosm_mutex;
|
|
|
+ struct work_struct reset_trigger_work;
|
|
|
+ struct work_struct scif_work;
|
|
|
+ char *cmdline;
|
|
|
+ char *firmware;
|
|
|
+ char *ramdisk;
|
|
|
+ char *bootmode;
|
|
|
+ void *log_buf_addr;
|
|
|
+ int *log_buf_len;
|
|
|
+ struct kernfs_node *state_sysfs;
|
|
|
+ struct cosm_hw_ops *hw_ops;
|
|
|
+ struct device dev;
|
|
|
+ int index;
|
|
|
+ struct dentry *dbg_dir;
|
|
|
+ scif_epd_t newepd;
|
|
|
+ scif_epd_t epd;
|
|
|
+ bool heartbeat_watchdog_enable;
|
|
|
+ bool sysfs_heartbeat_enable;
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * cosm_driver - operations for a cosm driver
|
|
|
+ *
|
|
|
+ * @driver: underlying device driver (populate name and owner).
|
|
|
+ * @probe: the function to call when a device is found. Returns 0 or -errno.
|
|
|
+ * @remove: the function to call when a device is removed.
|
|
|
+ */
|
|
|
+struct cosm_driver {
|
|
|
+ struct device_driver driver;
|
|
|
+ int (*probe)(struct cosm_device *dev);
|
|
|
+ void (*remove)(struct cosm_device *dev);
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * cosm_hw_ops - cosm bus ops
|
|
|
+ *
|
|
|
+ * @reset: trigger MIC reset
|
|
|
+ * @force_reset: force MIC reset
|
|
|
+ * @post_reset: inform MIC reset is complete
|
|
|
+ * @ready: is MIC ready for OS download
|
|
|
+ * @start: boot MIC
|
|
|
+ * @stop: prepare MIC for reset
|
|
|
+ * @family: return MIC HW family string
|
|
|
+ * @stepping: return MIC HW stepping string
|
|
|
+ * @aper: return MIC PCIe aperture
|
|
|
+ */
|
|
|
+struct cosm_hw_ops {
|
|
|
+ void (*reset)(struct cosm_device *cdev);
|
|
|
+ void (*force_reset)(struct cosm_device *cdev);
|
|
|
+ void (*post_reset)(struct cosm_device *cdev, enum mic_states state);
|
|
|
+ bool (*ready)(struct cosm_device *cdev);
|
|
|
+ int (*start)(struct cosm_device *cdev, int id);
|
|
|
+ void (*stop)(struct cosm_device *cdev, bool force);
|
|
|
+ ssize_t (*family)(struct cosm_device *cdev, char *buf);
|
|
|
+ ssize_t (*stepping)(struct cosm_device *cdev, char *buf);
|
|
|
+ struct mic_mw *(*aper)(struct cosm_device *cdev);
|
|
|
+};
|
|
|
+
|
|
|
+struct cosm_device *
|
|
|
+cosm_register_device(struct device *pdev, struct cosm_hw_ops *hw_ops);
|
|
|
+void cosm_unregister_device(struct cosm_device *dev);
|
|
|
+int cosm_register_driver(struct cosm_driver *drv);
|
|
|
+void cosm_unregister_driver(struct cosm_driver *drv);
|
|
|
+struct cosm_device *cosm_find_cdev_by_id(int id);
|
|
|
+
|
|
|
+static inline struct cosm_device *dev_to_cosm(struct device *dev)
|
|
|
+{
|
|
|
+ return container_of(dev, struct cosm_device, dev);
|
|
|
+}
|
|
|
+
|
|
|
+static inline struct cosm_driver *drv_to_cosm(struct device_driver *drv)
|
|
|
+{
|
|
|
+ return container_of(drv, struct cosm_driver, driver);
|
|
|
+}
|
|
|
+#endif /* _COSM_BUS_H */
|