xref: /OK3568_Linux_fs/kernel/drivers/rk_nand/rk_nand_blk.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify
5*4882a593Smuzhiyun  * it under the terms of the GNU General Public License as published by
6*4882a593Smuzhiyun  * the Free Software Foundation; either version 2 of the License, or
7*4882a593Smuzhiyun  * (at your option) any later version.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __RKNAND_BLK_H
11*4882a593Smuzhiyun #define __RKNAND_BLK_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/semaphore.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define MAX_PART_COUNT 32
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun struct nand_part {
18*4882a593Smuzhiyun 	unsigned char name[32];
19*4882a593Smuzhiyun 	unsigned long offset;
20*4882a593Smuzhiyun 	unsigned long size;
21*4882a593Smuzhiyun 	unsigned char type;
22*4882a593Smuzhiyun };
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun struct nand_blk_dev {
25*4882a593Smuzhiyun 	struct nand_blk_ops *nand_ops;
26*4882a593Smuzhiyun 	struct list_head list;
27*4882a593Smuzhiyun 	int devnum;
28*4882a593Smuzhiyun 	unsigned long size;
29*4882a593Smuzhiyun 	unsigned long off_size;
30*4882a593Smuzhiyun 	int readonly;
31*4882a593Smuzhiyun 	int writeonly;
32*4882a593Smuzhiyun 	int disable_access;
33*4882a593Smuzhiyun 	void *blkcore_priv;
34*4882a593Smuzhiyun };
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun struct nand_blk_ops {
37*4882a593Smuzhiyun 	char *name;
38*4882a593Smuzhiyun 	int major;
39*4882a593Smuzhiyun 	int minorbits;
40*4882a593Smuzhiyun 	int last_dev_index;
41*4882a593Smuzhiyun 	struct completion thread_exit;
42*4882a593Smuzhiyun 	int quit;
43*4882a593Smuzhiyun 	int nand_th_quited;
44*4882a593Smuzhiyun 	wait_queue_head_t thread_wq; /* thread wait queue */
45*4882a593Smuzhiyun 	struct request_queue *rq;
46*4882a593Smuzhiyun 	spinlock_t queue_lock; /* queue lock */
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	/* block-mq */
49*4882a593Smuzhiyun 	struct list_head rq_list;
50*4882a593Smuzhiyun 	struct blk_mq_tag_set *tag_set;
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun 	struct list_head devs;
53*4882a593Smuzhiyun 	struct module *owner;
54*4882a593Smuzhiyun };
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun extern struct device *g_nand_device;
57*4882a593Smuzhiyun void rknand_dev_suspend(void);
58*4882a593Smuzhiyun void rknand_dev_resume(void);
59*4882a593Smuzhiyun void rknand_dev_shutdown(void);
60*4882a593Smuzhiyun void rknand_dev_flush(void);
61*4882a593Smuzhiyun int __init rknand_dev_init(void);
62*4882a593Smuzhiyun int rknand_dev_exit(void);
63*4882a593Smuzhiyun void rknand_device_lock(void);
64*4882a593Smuzhiyun int rknand_device_trylock(void);
65*4882a593Smuzhiyun void rknand_device_unlock(void);
66*4882a593Smuzhiyun int nand_blk_add_whole_disk(void);
67*4882a593Smuzhiyun #endif
68