c2port.h 1.6 KB
Newer Older
R
Rodolfo Giometti 已提交
1 2 3 4 5 6 7 8 9 10 11
/*
 *  Silicon Labs C2 port Linux support
 *
 *  Copyright (c) 2007 Rodolfo Giometti <giometti@linux.it>
 *  Copyright (c) 2007 Eurotech S.p.A. <info@eurotech.it>
 *
 * 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
 */

12
#include <linux/kmemcheck.h>
R
Rodolfo Giometti 已提交
13 14 15

#define C2PORT_NAME_LEN			32

16 17
struct device;

R
Rodolfo Giometti 已提交
18 19 20 21 22 23 24
/*
 * C2 port basic structs
 */

/* Main struct */
struct c2port_ops;
struct c2port_device {
25
	kmemcheck_bitfield_begin(flags);
R
Rodolfo Giometti 已提交
26 27
	unsigned int access:1;
	unsigned int flash_access:1;
28
	kmemcheck_bitfield_end(flags);
R
Rodolfo Giometti 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

	int id;
	char name[C2PORT_NAME_LEN];
	struct c2port_ops *ops;
	struct mutex mutex;		/* prevent races during read/write */

	struct device *dev;

	void *private_data;
};

/* Basic operations */
struct c2port_ops {
	/* Flash layout */
	unsigned short block_size;	/* flash block size in bytes */
	unsigned short blocks_num;	/* flash blocks number */

	/* Enable or disable the access to C2 port */
	void (*access)(struct c2port_device *dev, int status);

	/* Set C2D data line as input/output */
	void (*c2d_dir)(struct c2port_device *dev, int dir);

	/* Read/write C2D data line */
	int (*c2d_get)(struct c2port_device *dev);
	void (*c2d_set)(struct c2port_device *dev, int status);

	/* Write C2CK clock line */
	void (*c2ck_set)(struct c2port_device *dev, int status);
};

/*
 * Exported functions
 */

extern struct c2port_device *c2port_device_register(char *name,
					struct c2port_ops *ops, void *devdata);
extern void c2port_device_unregister(struct c2port_device *dev);
新手
引导
客服 返回
顶部