aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/auto_fs4.h
blob: 31a29541b504234174c0a9678bba9b60bc60e7ac (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* -*- c -*-
 * linux/include/linux/auto_fs4.h
 *
 * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
 *
 * This file is part of the Linux kernel and is made available under
 * the terms of the GNU General Public License, version 2, or at your
 * option, any later version, incorporated herein by reference.
 */

#ifndef _LINUX_AUTO_FS4_H
#define _LINUX_AUTO_FS4_H

/* Include common v3 definitions */
#include <linux/auto_fs.h>

/* autofs v4 definitions */
#undef AUTOFS_PROTO_VERSION
#undef AUTOFS_MIN_PROTO_VERSION
#undef AUTOFS_MAX_PROTO_VERSION

#define AUTOFS_PROTO_VERSION		5
#define AUTOFS_MIN_PROTO_VERSION	3
#define AUTOFS_MAX_PROTO_VERSION	5

#define AUTOFS_PROTO_SUBVERSION		0

/* Mask for expire behaviour */
#define AUTOFS_EXP_IMMEDIATE		1
#define AUTOFS_EXP_LEAVES		2

/* Daemon notification packet types */
enum autofs_notify {
	NFY_NONE,
	NFY_MOUNT,
	NFY_EXPIRE
};

/* Kernel protocol version 4 packet types */

/* Expire entry (umount request) */
#define autofs_ptype_expire_multi	2

/* Kernel protocol version 5 packet types */

/* Indirect mount missing and expire requests. */
#define autofs_ptype_missing_indirect	3
#define autofs_ptype_expire_indirect	4

/* Direct mount missing and expire requests */
#define autofs_ptype_missing_direct	5
#define autofs_ptype_expire_direct	6

/* v4 multi expire (via pipe) */
struct autofs_packet_expire_multi {
	struct autofs_packet_hdr hdr;
        autofs_wqt_t wait_queue_token;
	int len;
	char name[NAME_MAX+1];
};

union autofs_packet_union {
	struct autofs_packet_hdr hdr;
	struct autofs_packet_missing missing;
	struct autofs_packet_expire expire;
	struct autofs_packet_expire_multi expire_multi;
};

/* autofs v5 common packet struct */
struct autofs_v5_packet {
	struct autofs_packet_hdr hdr;
	autofs_wqt_t wait_queue_token;
	__u32 dev;
	__u64 ino;
	__u32 uid;
	__u32 gid;
	__u32 pid;
	__u32 tgid;
	__u32 len;
	char name[NAME_MAX+1];
};

typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
typedef struct autofs_v5_packet autofs_packet_expire_direct_t;

union autofs_v5_packet_union {
	struct autofs_packet_hdr hdr;
	struct autofs_v5_packet v5_packet;
	autofs_packet_missing_indirect_t missing_indirect;
	autofs_packet_expire_indirect_t expire_indirect;
	autofs_packet_missing_direct_t missing_direct;
	autofs_packet_expire_direct_t expire_direct;
};

#define AUTOFS_IOC_EXPIRE_MULTI		_IOW(0x93,0x66,int)
#define AUTOFS_IOC_EXPIRE_INDIRECT	AUTOFS_IOC_EXPIRE_MULTI
#define AUTOFS_IOC_EXPIRE_DIRECT	AUTOFS_IOC_EXPIRE_MULTI
#define AUTOFS_IOC_PROTOSUBVER		_IOR(0x93,0x67,int)
#define AUTOFS_IOC_ASKREGHOST           _IOR(0x93,0x68,int)
#define AUTOFS_IOC_TOGGLEREGHOST        _IOR(0x93,0x69,int)
#define AUTOFS_IOC_ASKUMOUNT		_IOR(0x93,0x70,int)


#endif /* _LINUX_AUTO_FS4_H */
#define UCB_ID 0x7e #define UCB_ID_1400 0x4304 struct ucb1400_ts { struct input_dev *ts_idev; struct task_struct *ts_task; int id; wait_queue_head_t ts_wait; unsigned int ts_restart:1; int irq; unsigned int irq_pending; /* not bit field shared */ struct snd_ac97 *ac97; }; struct ucb1400 { struct platform_device *ucb1400_ts; }; static inline u16 ucb1400_reg_read(struct snd_ac97 *ac97, u16 reg) { return ac97->bus->ops->read(ac97, reg); } static inline void ucb1400_reg_write(struct snd_ac97 *ac97, u16 reg, u16 val) { ac97->bus->ops->write(ac97, reg, val); } static inline u16 ucb1400_gpio_get_value(struct snd_ac97 *ac97, u16 gpio) { return ucb1400_reg_read(ac97, UCB_IO_DATA) & (1 << gpio); } static inline void ucb1400_gpio_set_value(struct snd_ac97 *ac97, u16 gpio, u16 val) { ucb1400_reg_write(ac97, UCB_IO_DATA, val ? ucb1400_reg_read(ac97, UCB_IO_DATA) | (1 << gpio) : ucb1400_reg_read(ac97, UCB_IO_DATA) & ~(1 << gpio)); } static inline u16 ucb1400_gpio_get_direction(struct snd_ac97 *ac97, u16 gpio) { return ucb1400_reg_read(ac97, UCB_IO_DIR) & (1 << gpio); } static inline void ucb1400_gpio_set_direction(struct snd_ac97 *ac97, u16 gpio, u16 dir) { ucb1400_reg_write(ac97, UCB_IO_DIR, dir ? ucb1400_reg_read(ac97, UCB_IO_DIR) | (1 << gpio) : ucb1400_reg_read(ac97, UCB_IO_DIR) & ~(1 << gpio)); } static inline void ucb1400_adc_enable(struct snd_ac97 *ac97) { ucb1400_reg_write(ac97, UCB_ADC_CR, UCB_ADC_ENA); } static unsigned int ucb1400_adc_read(struct snd_ac97 *ac97, u16 adc_channel, int adcsync) { unsigned int val; if (adcsync) adc_channel |= UCB_ADC_SYNC_ENA; ucb1400_reg_write(ac97, UCB_ADC_CR, UCB_ADC_ENA | adc_channel); ucb1400_reg_write(ac97, UCB_ADC_CR, UCB_ADC_ENA | adc_channel | UCB_ADC_START); while (!((val = ucb1400_reg_read(ac97, UCB_ADC_DATA)) & UCB_ADC_DAT_VALID)) schedule_timeout_uninterruptible(1); return val & UCB_ADC_DAT_MASK; } static inline void ucb1400_adc_disable(struct snd_ac97 *ac97) { ucb1400_reg_write(ac97, UCB_ADC_CR, 0); } #endif