Linux Audio

Check our new training course

Loading...
v3.1
  1/* n2rng.h: Niagara2 RNG defines.
  2 *
  3 * Copyright (C) 2008 David S. Miller <davem@davemloft.net>
  4 */
  5
  6#ifndef _N2RNG_H
  7#define _N2RNG_H
  8
  9#define RNG_CTL_WAIT       0x0000000001fffe00ULL /* Minimum wait time       */
 10#define RNG_CTL_WAIT_SHIFT 9
 11#define RNG_CTL_BYPASS     0x0000000000000100ULL /* VCO voltage source      */
 12#define RNG_CTL_VCO        0x00000000000000c0ULL /* VCO rate control        */
 13#define RNG_CTL_VCO_SHIFT  6
 14#define RNG_CTL_ASEL       0x0000000000000030ULL /* Analog MUX select       */
 15#define RNG_CTL_ASEL_SHIFT 4
 16#define RNG_CTL_LFSR       0x0000000000000008ULL /* Use LFSR or plain shift */
 17#define RNG_CTL_ES3        0x0000000000000004ULL /* Enable entropy source 3 */
 18#define RNG_CTL_ES2        0x0000000000000002ULL /* Enable entropy source 2 */
 19#define RNG_CTL_ES1        0x0000000000000001ULL /* Enable entropy source 1 */
 20
 21#define HV_FAST_RNG_GET_DIAG_CTL	0x130
 22#define HV_FAST_RNG_CTL_READ		0x131
 23#define HV_FAST_RNG_CTL_WRITE		0x132
 24#define HV_FAST_RNG_DATA_READ_DIAG	0x133
 25#define HV_FAST_RNG_DATA_READ		0x134
 26
 27#define HV_RNG_STATE_UNCONFIGURED	0
 28#define HV_RNG_STATE_CONFIGURED		1
 29#define HV_RNG_STATE_HEALTHCHECK	2
 30#define HV_RNG_STATE_ERROR		3
 31
 32#define HV_RNG_NUM_CONTROL		4
 33
 34#ifndef __ASSEMBLY__
 35extern unsigned long sun4v_rng_get_diag_ctl(void);
 36extern unsigned long sun4v_rng_ctl_read_v1(unsigned long ctl_regs_ra,
 37					   unsigned long *state,
 38					   unsigned long *tick_delta);
 39extern unsigned long sun4v_rng_ctl_read_v2(unsigned long ctl_regs_ra,
 40					   unsigned long unit,
 41					   unsigned long *state,
 42					   unsigned long *tick_delta,
 43					   unsigned long *watchdog,
 44					   unsigned long *write_status);
 45extern unsigned long sun4v_rng_ctl_write_v1(unsigned long ctl_regs_ra,
 46					    unsigned long state,
 47					    unsigned long write_timeout,
 48					    unsigned long *tick_delta);
 49extern unsigned long sun4v_rng_ctl_write_v2(unsigned long ctl_regs_ra,
 50					    unsigned long state,
 51					    unsigned long write_timeout,
 52					    unsigned long unit);
 53extern unsigned long sun4v_rng_data_read_diag_v1(unsigned long data_ra,
 54						 unsigned long len,
 55						 unsigned long *tick_delta);
 56extern unsigned long sun4v_rng_data_read_diag_v2(unsigned long data_ra,
 57						 unsigned long len,
 58						 unsigned long unit,
 59						 unsigned long *tick_delta);
 60extern unsigned long sun4v_rng_data_read(unsigned long data_ra,
 61					 unsigned long *tick_delta);
 62
 63struct n2rng_unit {
 64	u64			control[HV_RNG_NUM_CONTROL];
 65};
 66
 67struct n2rng {
 68	struct platform_device	*op;
 69
 70	unsigned long		flags;
 71#define N2RNG_FLAG_MULTI	0x00000001 /* Multi-unit capable RNG */
 72#define N2RNG_FLAG_CONTROL	0x00000002 /* Operating in control domain */
 73#define N2RNG_FLAG_READY	0x00000008 /* Ready for hw-rng layer      */
 74#define N2RNG_FLAG_SHUTDOWN	0x00000010 /* Driver unregistering        */
 75#define N2RNG_FLAG_BUFFER_VALID	0x00000020 /* u32 buffer holds valid data */
 76
 77	int			num_units;
 78	struct n2rng_unit	*units;
 79
 80	struct hwrng		hwrng;
 81	u32			buffer;
 82
 83	/* Registered hypervisor group API major and minor version.  */
 84	unsigned long		hvapi_major;
 85	unsigned long		hvapi_minor;
 86
 87	struct delayed_work	work;
 88
 89	unsigned long		hv_state; /* HV_RNG_STATE_foo */
 90
 91	unsigned long		health_check_sec;
 92	unsigned long		accum_cycles;
 93	unsigned long		wd_timeo;
 94#define N2RNG_HEALTH_CHECK_SEC_DEFAULT	0
 95#define N2RNG_ACCUM_CYCLES_DEFAULT	2048
 96#define N2RNG_WD_TIMEO_DEFAULT		0
 97
 98	u64			scratch_control[HV_RNG_NUM_CONTROL];
 99
100#define SELFTEST_TICKS		38859
101#define SELFTEST_VAL		((u64)0xB8820C7BD387E32C)
102#define SELFTEST_POLY		((u64)0x231DCEE91262B8A3)
103#define SELFTEST_MATCH_GOAL	6
104#define SELFTEST_LOOPS_MAX	40000
105#define SELFTEST_BUFFER_WORDS	8
106
107	u64			test_data;
108	u64			test_control[HV_RNG_NUM_CONTROL];
109	u64			test_buffer[SELFTEST_BUFFER_WORDS];
110};
111
112#define N2RNG_BLOCK_LIMIT	60000
113#define N2RNG_BUSY_LIMIT	100
114#define N2RNG_HCHECK_LIMIT	100
115
116#endif /* !(__ASSEMBLY__) */
117
118#endif /* _N2RNG_H */
v3.15
  1/* n2rng.h: Niagara2 RNG defines.
  2 *
  3 * Copyright (C) 2008 David S. Miller <davem@davemloft.net>
  4 */
  5
  6#ifndef _N2RNG_H
  7#define _N2RNG_H
  8
  9#define RNG_CTL_WAIT       0x0000000001fffe00ULL /* Minimum wait time       */
 10#define RNG_CTL_WAIT_SHIFT 9
 11#define RNG_CTL_BYPASS     0x0000000000000100ULL /* VCO voltage source      */
 12#define RNG_CTL_VCO        0x00000000000000c0ULL /* VCO rate control        */
 13#define RNG_CTL_VCO_SHIFT  6
 14#define RNG_CTL_ASEL       0x0000000000000030ULL /* Analog MUX select       */
 15#define RNG_CTL_ASEL_SHIFT 4
 16#define RNG_CTL_LFSR       0x0000000000000008ULL /* Use LFSR or plain shift */
 17#define RNG_CTL_ES3        0x0000000000000004ULL /* Enable entropy source 3 */
 18#define RNG_CTL_ES2        0x0000000000000002ULL /* Enable entropy source 2 */
 19#define RNG_CTL_ES1        0x0000000000000001ULL /* Enable entropy source 1 */
 20
 21#define HV_FAST_RNG_GET_DIAG_CTL	0x130
 22#define HV_FAST_RNG_CTL_READ		0x131
 23#define HV_FAST_RNG_CTL_WRITE		0x132
 24#define HV_FAST_RNG_DATA_READ_DIAG	0x133
 25#define HV_FAST_RNG_DATA_READ		0x134
 26
 27#define HV_RNG_STATE_UNCONFIGURED	0
 28#define HV_RNG_STATE_CONFIGURED		1
 29#define HV_RNG_STATE_HEALTHCHECK	2
 30#define HV_RNG_STATE_ERROR		3
 31
 32#define HV_RNG_NUM_CONTROL		4
 33
 34#ifndef __ASSEMBLY__
 35extern unsigned long sun4v_rng_get_diag_ctl(void);
 36extern unsigned long sun4v_rng_ctl_read_v1(unsigned long ctl_regs_ra,
 37					   unsigned long *state,
 38					   unsigned long *tick_delta);
 39extern unsigned long sun4v_rng_ctl_read_v2(unsigned long ctl_regs_ra,
 40					   unsigned long unit,
 41					   unsigned long *state,
 42					   unsigned long *tick_delta,
 43					   unsigned long *watchdog,
 44					   unsigned long *write_status);
 45extern unsigned long sun4v_rng_ctl_write_v1(unsigned long ctl_regs_ra,
 46					    unsigned long state,
 47					    unsigned long write_timeout,
 48					    unsigned long *tick_delta);
 49extern unsigned long sun4v_rng_ctl_write_v2(unsigned long ctl_regs_ra,
 50					    unsigned long state,
 51					    unsigned long write_timeout,
 52					    unsigned long unit);
 53extern unsigned long sun4v_rng_data_read_diag_v1(unsigned long data_ra,
 54						 unsigned long len,
 55						 unsigned long *tick_delta);
 56extern unsigned long sun4v_rng_data_read_diag_v2(unsigned long data_ra,
 57						 unsigned long len,
 58						 unsigned long unit,
 59						 unsigned long *tick_delta);
 60extern unsigned long sun4v_rng_data_read(unsigned long data_ra,
 61					 unsigned long *tick_delta);
 62
 63struct n2rng_unit {
 64	u64			control[HV_RNG_NUM_CONTROL];
 65};
 66
 67struct n2rng {
 68	struct platform_device	*op;
 69
 70	unsigned long		flags;
 71#define N2RNG_FLAG_MULTI	0x00000001 /* Multi-unit capable RNG */
 72#define N2RNG_FLAG_CONTROL	0x00000002 /* Operating in control domain */
 73#define N2RNG_FLAG_READY	0x00000008 /* Ready for hw-rng layer      */
 74#define N2RNG_FLAG_SHUTDOWN	0x00000010 /* Driver unregistering        */
 75#define N2RNG_FLAG_BUFFER_VALID	0x00000020 /* u32 buffer holds valid data */
 76
 77	int			num_units;
 78	struct n2rng_unit	*units;
 79
 80	struct hwrng		hwrng;
 81	u32			buffer;
 82
 83	/* Registered hypervisor group API major and minor version.  */
 84	unsigned long		hvapi_major;
 85	unsigned long		hvapi_minor;
 86
 87	struct delayed_work	work;
 88
 89	unsigned long		hv_state; /* HV_RNG_STATE_foo */
 90
 91	unsigned long		health_check_sec;
 92	unsigned long		accum_cycles;
 93	unsigned long		wd_timeo;
 94#define N2RNG_HEALTH_CHECK_SEC_DEFAULT	0
 95#define N2RNG_ACCUM_CYCLES_DEFAULT	2048
 96#define N2RNG_WD_TIMEO_DEFAULT		0
 97
 98	u64			scratch_control[HV_RNG_NUM_CONTROL];
 99
100#define SELFTEST_TICKS		38859
101#define SELFTEST_VAL		((u64)0xB8820C7BD387E32C)
102#define SELFTEST_POLY		((u64)0x231DCEE91262B8A3)
103#define SELFTEST_MATCH_GOAL	6
104#define SELFTEST_LOOPS_MAX	40000
105#define SELFTEST_BUFFER_WORDS	8
106
107	u64			test_data;
108	u64			test_control[HV_RNG_NUM_CONTROL];
109	u64			test_buffer[SELFTEST_BUFFER_WORDS];
110};
111
112#define N2RNG_BLOCK_LIMIT	60000
113#define N2RNG_BUSY_LIMIT	100
114#define N2RNG_HCHECK_LIMIT	100
115
116#endif /* !(__ASSEMBLY__) */
117
118#endif /* _N2RNG_H */