⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssi_core.c

📁 linux和2410结合开发 用他可以生成2410所需的zImage文件
💻 C
字号:
/* *  linux/drivers/ssi/ssi_core.c * * This file provides a common framework to allow multiple SSI devices * to work together on a single SSI bus. * * You can use this in two ways: *  1. select the device, queue up data, flush the data to the device, *     (optionally) purge the received data, deselect the device. *  2. select the device, queue up one data word, flush to the device *     read data word, queue up next data word, flush to the device... *     deselect the device. */#include <linux/module.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/malloc.h>#include <linux/init.h>#include <asm/errno.h>#include "ssi_bus.h"#include "ssi_dev.h"#define DEBUG/** *	ssi_core_rcv - pass received SSI data to the device *	@bus: the bus that the data was received from *	@data: the data word that was received * *	This function is intended to be called by SSI bus device *	drivers to pass received data to the device driver. */int ssi_core_rcv(struct ssi_bus *bus, u_int data){	struct ssi_dev *dev = bus->dev;	if (dev && dev->rcv)		dev->rcv(dev, data);	return 0;}/** *	ssi_transmit_data - queue SSI data for later transmission *	@dev: device requesting data to be transmitted *	@data: data word to be transmitted. * *	Queue one data word of SSI data for later transmission. */int ssi_transmit_data(struct ssi_dev *dev, u_int data){	struct ssi_bus *bus = dev->bus;	/*	 * Make sure that we currently own the bus	 */	if (bus->dev != dev)		BUG();	bus->trans(bus, data);	return 0;}/** *	ssi_select_device - select a SSI device for later transactions *	@dev: device to be selected */int ssi_select_device(struct ssi_bus *bus, struct ssi_dev *dev){	int retval;#ifdef DEBUG	printk("SSI: selecting device %s on bus %s\n",		dev ? dev->name : "<none>", bus->name);#endif	/*	 * Select the device if it wasn't already selected.	 */	retval = 0;	if (bus->dev != dev) {		retval = bus->select(bus, dev);		bus->dev = dev;	}	return retval;}/** *	ssi_register_device - register a SSI device with a SSI bus *	@bus: bus *	@dev: SSI device */int ssi_register_device(struct ssi_bus *bus, struct ssi_dev *dev){	int retval;	dev->bus = bus;	bus->devices++;	retval = dev->init(dev);	if (retval != 0) {		dev->bus = NULL;		bus->devices--;	} else {#ifdef DEBUG		printk("SSI: registered new device %s on bus %s\n", dev->name, bus->name);#endif	}	return retval;}/** *	ssi_unregister_device - unregister a SSI device from a SSI bus *	@dev: SSI device */int ssi_unregister_device(struct ssi_dev *dev){	struct ssi_bus *bus = dev->bus;	if (bus->dev == dev)		bus->dev = NULL;	dev->bus = NULL;	bus->devices--;#ifdef DEBUG	printk("SSI: unregistered device %s on bus %s\n", dev->name, bus->name);#endif	return 0;}/** *	ssi_register_bus - register a SSI bus driver *	@bus: bus */int ssi_register_bus(struct ssi_bus *bus){	int retval;	retval = bus->init(bus);	if (retval == 0) {		bus->devices = 0;#ifdef DEBUG		printk("SSI: registered new bus %s\n", bus->name);#endif	}	return retval;}/** *	ssi_unregister_bus - unregister a SSI bus driver *	@bus: bus */int ssi_unregister_bus(struct ssi_bus *bus){	int retval = -EBUSY;	if (bus->devices == 0) {		retval = 0;	}	return retval;}static int __init ssi_init(void){	return 0;}static void __exit ssi_exit(void){}module_init(ssi_init);module_exit(ssi_exit);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -