Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
sep_dev.h
Go to the documentation of this file.
1 #ifndef __SEP_DEV_H__
2 #define __SEP_DEV_H__
3 
4 /*
5  *
6  * sep_dev.h - Security Processor Device Structures
7  *
8  * Copyright(c) 2009-2011 Intel Corporation. All rights reserved.
9  * Contributions(c) 2009-2011 Discretix. All rights reserved.
10  *
11  * This program is free software; you can redistribute it and/or modify it
12  * under the terms of the GNU General Public License as published by the Free
13  * Software Foundation; version 2 of the License.
14  *
15  * This program is distributed in the hope that it will be useful, but WITHOUT
16  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
18  * more details.
19  *
20  * You should have received a copy of the GNU General Public License along with
21  * this program; if not, write to the Free Software Foundation, Inc., 59
22  * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23  *
24  * CONTACTS:
25  *
26  * Mark Allyn [email protected]
27  * Jayant Mangalampalli [email protected]
28  *
29  * CHANGES
30  * 2010.09.14 upgrade to Medfield
31  * 2011.02.22 enable kernel crypto
32  */
33 
34 struct sep_device {
35  /* pointer to pci dev */
36  struct pci_dev *pdev;
37 
38  /* character device file */
39  struct cdev sep_cdev;
40 
41  /* devices (using misc dev) */
43 
44  /* major / minor numbers of device */
46  /* guards command sent counter */
48  /* guards driver memory usage in fastcall if */
50 
51  /* flags to indicate use and lock status of sep */
53  unsigned long in_use_flags;
54 
55  /* address of the shared memory allocated during init for SEP driver
56  (coherent alloc) */
58  size_t shared_size;
59  void *shared_addr;
60 
61  /* start address of the access to the SEP registers from driver */
65 
66  /* wait queue heads of the driver */
69 
73 
74  /* Is this in use? */
76 
77  /* indicates whether power save is set up */
79 
80  /* Power state */
82 
83  /* transaction counter that coordinates the
84  transactions between SEP and HOST */
85  unsigned long send_ct;
86  /* counter for the messages from sep */
87  unsigned long reply_ct;
88 
89  /* The following are used for kernel crypto client requests */
90  u32 in_kernel; /* Set for kernel client request */
98 };
99 
100 extern struct sep_device *sep_dev;
101 
114 };
115 
128 };
129 
135  struct list_head list;
137 };
138 
139 static inline void sep_write_reg(struct sep_device *dev, int reg, u32 value)
140 {
141  void __iomem *addr = dev->reg_addr + reg;
142  writel(value, addr);
143 }
144 
145 static inline u32 sep_read_reg(struct sep_device *dev, int reg)
146 {
147  void __iomem *addr = dev->reg_addr + reg;
148  return readl(addr);
149 }
150 
151 /* wait for SRAM write complete(indirect write */
152 static inline void sep_wait_sram_write(struct sep_device *dev)
153 {
154  u32 reg_val;
155  do {
156  reg_val = sep_read_reg(dev, HW_SRAM_DATA_READY_REG_ADDR);
157  } while (!(reg_val & 1));
158 }
159 
160 
161 #endif