Blame view

kernel/linux-rt-4.4.41/include/linux/mtd/qinfo.h 2.43 KB
5113f6f70   김현기   kernel add
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
  #ifndef __LINUX_MTD_QINFO_H
  #define __LINUX_MTD_QINFO_H
  
  #include <linux/mtd/map.h>
  #include <linux/wait.h>
  #include <linux/spinlock.h>
  #include <linux/delay.h>
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/flashchip.h>
  #include <linux/mtd/partitions.h>
  
  /* lpddr_private describes lpddr flash chip in memory map
   * @ManufactId - Chip Manufacture ID
   * @DevId - Chip Device ID
   * @qinfo - pointer to qinfo records describing the chip
   * @numchips - number of chips including virual RWW partitions
   * @chipshift - Chip/partiton size 2^chipshift
   * @chips - per-chip data structure
   */
  struct lpddr_private {
  	uint16_t ManufactId;
  	uint16_t DevId;
  	struct qinfo_chip *qinfo;
  	int numchips;
  	unsigned long chipshift;
  	struct flchip chips[0];
  };
  
  /* qinfo_query_info structure contains request information for
   * each qinfo record
   * @major - major number of qinfo record
   * @major - minor number of qinfo record
   * @id_str - descriptive string to access the record
   * @desc - detailed description for the qinfo record
   */
  struct qinfo_query_info {
  	uint8_t	major;
  	uint8_t	minor;
  	char *id_str;
  	char *desc;
  };
  
  /*
   * qinfo_chip structure contains necessary qinfo records data
   * @DevSizeShift - Device size 2^n bytes
   * @BufSizeShift - Program buffer size 2^n bytes
   * @TotalBlocksNum - Total number of blocks
   * @UniformBlockSizeShift - Uniform block size 2^UniformBlockSizeShift bytes
   * @HWPartsNum - Number of hardware partitions
   * @SuspEraseSupp - Suspend erase supported
   * @SingleWordProgTime - Single word program 2^SingleWordProgTime u-sec
   * @ProgBufferTime - Program buffer write 2^ProgBufferTime u-sec
   * @BlockEraseTime - Block erase 2^BlockEraseTime m-sec
   */
  struct qinfo_chip {
  	/* General device info */
  	uint16_t DevSizeShift;
  	uint16_t BufSizeShift;
  	/* Erase block information */
  	uint16_t TotalBlocksNum;
  	uint16_t UniformBlockSizeShift;
  	/* Partition information */
  	uint16_t HWPartsNum;
  	/* Optional features */
  	uint16_t SuspEraseSupp;
  	/* Operation typical time */
  	uint16_t SingleWordProgTime;
  	uint16_t ProgBufferTime;
  	uint16_t BlockEraseTime;
  };
  
  /* defines for fixup usage */
  #define LPDDR_MFR_ANY		0xffff
  #define LPDDR_ID_ANY		0xffff
  #define NUMONYX_MFGR_ID		0x0089
  #define R18_DEVICE_ID_1G	0x893c
  
  static inline map_word lpddr_build_cmd(u_long cmd, struct map_info *map)
  {
  	map_word val = { {0} };
  	val.x[0] = cmd;
  	return val;
  }
  
  #define CMD(x) lpddr_build_cmd(x, map)
  #define CMDVAL(cmd) cmd.x[0]
  
  struct mtd_info *lpddr_cmdset(struct map_info *);
  
  #endif