12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- Introduction:
- =============
- The msm_rng device driver handles random number generation
- using hardware present in MSM chipsets.
- Hardware description:
- =====================
- The supported hardware is a macro block within a system-on-a-chip (SoC).
- The hardware is pseudo random number generator (PRNG) with four oscillators
- setup with a linear feedback shift register (LFSR).
- The hardware must be initially configured once for normal operation and
- a 32bit FIFO is read to obtain hardware generated pseudo random numbers.
- Currently the driver configures the hardware registers during initialization
- and the future plan is to have the boot loader configure these registers and
- write lock them so only host OS can read them and the driver writes will be
- ignored.
- Software description
- ====================
- The driver is based on the platform_driver model. It registers an entry,
- exit and probe functions. Once the probe function is called, the driver
- registers a callback function with the hwrng (Hardware Random Number Generator)
- subsystem that is called when the hardware device (i.e. /dev/hw_random) is
- requesting random data from this device.
- Once the callback is issued from the hwrng subsystem, the driver checks to
- make sure the hardware has random data available and determines the maximum
- data it can return and returns that much data back.
- Power Management
- ================
- Initially, no services are provided in the area of power management.
- SMP/multi-core
- ==============
- The locking mechanism for the hwrng operations is taken care of by the hwrng
- framework. There are no SMP situations within the driver that need addressing.
- Driver parameters
- =================
- This driver is built and statically linked into the kernel; therefore,
- there are no module parameters supported by this driver.
- There are no kernel command line parameters supported by this driver.
- Config options
- ==============
- This driver is enabled by the kernel config option CONFIG_HW_RANDOM_MSM.
- The option CONFIG_HW_RANDOM_MSM depends on HW_RANDOM && ARCH_MSM.
- Dependencies:
- =============
- This driver depends on the HW_RANDOM subsystem to register with and get
- callbacks to request random data.
- User space utilities:
- =====================
- The driver alone does not feed random numbers into kernel but just provides a
- method to get random numbers to a known device (i.e. /dev/hw_random). A user-
- space utility is required to monitor the /dev/random device entropy pool and
- feed it from the /dev/hw_random device. This application also must perform some
- sort of sanity checking on the returned data to make sure the data is not all
- the same.
- There is currently a GPL v2 tool called rng-tools that has a daemon called,
- "rngd" that performs this functionality. There is also a test tool in this
- package that tests the whole random subsystem.
|