96 lines
2.0 KiB
C
96 lines
2.0 KiB
C
/*
|
|
* linux/include/linux/l3/l3.h
|
|
*
|
|
* Copyright (C) 2001 Russell King, All Rights Reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License.
|
|
*
|
|
* Derived from i2c.h by Simon G. Vogl
|
|
*/
|
|
#ifndef L3_H
|
|
#define L3_H
|
|
|
|
struct l3_msg {
|
|
unsigned char addr; /* slave address */
|
|
unsigned char flags;
|
|
#define L3_M_RD 0x01
|
|
#define L3_M_NOADDR 0x02
|
|
unsigned short len; /* msg length */
|
|
unsigned char *buf; /* pointer to msg data */
|
|
};
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/list.h>
|
|
|
|
struct l3_adapter;
|
|
|
|
struct l3_algorithm {
|
|
/* textual description */
|
|
char name[32];
|
|
|
|
/* perform bus transactions */
|
|
int (*xfer)(struct l3_adapter *, struct l3_msg msgs[], int num);
|
|
};
|
|
|
|
struct semaphore;
|
|
|
|
/*
|
|
* l3_adapter is the structure used to identify a physical L3 bus along
|
|
* with the access algorithms necessary to access it.
|
|
*/
|
|
struct l3_adapter {
|
|
/*
|
|
* This name is used to uniquely identify the adapter.
|
|
* It should be the same as the module name.
|
|
*/
|
|
char name[32];
|
|
|
|
/*
|
|
* the algorithm to access the bus
|
|
*/
|
|
struct l3_algorithm *algo;
|
|
|
|
/*
|
|
* Algorithm specific data
|
|
*/
|
|
void *algo_data;
|
|
|
|
/*
|
|
* This may be NULL, or should point to the module struct
|
|
*/
|
|
struct module *owner;
|
|
|
|
/*
|
|
* private data for the adapter
|
|
*/
|
|
void *data;
|
|
|
|
/*
|
|
* Our lock. Unlike the i2c layer, we allow this to be used for
|
|
* other stuff, like the i2c layer lock. Some people implement
|
|
* i2c stuff using the same signals as the l3 bus.
|
|
*/
|
|
struct semaphore *lock;
|
|
|
|
/*
|
|
* List of all adapters.
|
|
*/
|
|
struct list_head adapters;
|
|
};
|
|
|
|
extern int l3_add_adapter(struct l3_adapter *);
|
|
extern int l3_del_adapter(struct l3_adapter *);
|
|
extern void l3_put_adapter(struct l3_adapter *);
|
|
extern struct l3_adapter *l3_get_adapter(const char *name);
|
|
|
|
extern int l3_write(struct l3_adapter *, int, const char *, int);
|
|
extern int l3_read(struct l3_adapter *, int, char *, int);
|
|
|
|
#endif
|
|
|
|
#endif /* L3_H */
|