cregit-Linux how code gets into the kernel

Release 4.11 drivers/misc/mic/bus/cosm_bus.h

/*
 * 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.
 * @prev_state: MIC state previous to MIC_RESETTING
 * @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 prev_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); }

Contributors

PersonTokensPropCommitsCommitProp
Ashutosh Dixit25100.00%1100.00%
Total25100.00%1100.00%


static inline struct cosm_driver *drv_to_cosm(struct device_driver *drv) { return container_of(drv, struct cosm_driver, driver); }

Contributors

PersonTokensPropCommitsCommitProp
Ashutosh Dixit25100.00%1100.00%
Total25100.00%1100.00%

#endif /* _COSM_BUS_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Ashutosh Dixit389100.00%2100.00%
Total389100.00%2100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.