| 
									
										
										
										
											2010-05-14 16:28:59 +09:00
										 |  |  | #ifndef PM_SMBUS_H
 | 
					
						
							|  |  |  | #define PM_SMBUS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-12 07:23:46 +02:00
										 |  |  | #include "exec/memory.h"
 | 
					
						
							| 
									
										
										
										
											2018-11-13 18:31:27 -06:00
										 |  |  | #include "hw/i2c/smbus_master.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-20 15:26:04 -05:00
										 |  |  | #define PM_SMBUS_MAX_MSG_SIZE 32
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-14 16:28:59 +09:00
										 |  |  | typedef struct PMSMBus { | 
					
						
							| 
									
										
										
										
											2013-08-03 00:18:51 +02:00
										 |  |  |     I2CBus *smbus; | 
					
						
							| 
									
										
										
										
											2012-11-23 14:57:01 +01:00
										 |  |  |     MemoryRegion io; | 
					
						
							| 
									
										
										
										
											2010-05-14 16:28:59 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     uint8_t smb_stat; | 
					
						
							|  |  |  |     uint8_t smb_ctl; | 
					
						
							|  |  |  |     uint8_t smb_cmd; | 
					
						
							|  |  |  |     uint8_t smb_addr; | 
					
						
							|  |  |  |     uint8_t smb_data0; | 
					
						
							|  |  |  |     uint8_t smb_data1; | 
					
						
							| 
									
										
										
										
											2018-08-20 15:26:04 -05:00
										 |  |  |     uint8_t smb_data[PM_SMBUS_MAX_MSG_SIZE]; | 
					
						
							|  |  |  |     uint8_t smb_blkdata; | 
					
						
							|  |  |  |     uint8_t smb_auxctl; | 
					
						
							|  |  |  |     uint32_t smb_index; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Set by pm_smbus.c */ | 
					
						
							|  |  |  |     void (*reset)(struct PMSMBus *s); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Set by the user. */ | 
					
						
							|  |  |  |     bool i2c_enable; | 
					
						
							| 
									
										
										
										
											2018-08-20 15:26:06 -05:00
										 |  |  |     void (*set_irq)(struct PMSMBus *s, bool enabled); | 
					
						
							|  |  |  |     void *opaque; | 
					
						
							| 
									
										
										
										
											2018-08-20 15:26:04 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Internally used by pm_smbus. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Set on block transfers after the last byte has been read, so the
 | 
					
						
							|  |  |  |        INTR bit can be set at the right time. */ | 
					
						
							|  |  |  |     bool op_done; | 
					
						
							| 
									
										
										
										
											2018-11-14 14:41:01 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Set during an I2C block read, so we know how to handle data. */ | 
					
						
							|  |  |  |     bool in_i2c_block_read; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Used to work around a bug in AMIBIOS, see smb_transaction_start() */ | 
					
						
							|  |  |  |     bool start_transaction_on_status_read; | 
					
						
							| 
									
										
										
										
											2010-05-14 16:28:59 +09:00
										 |  |  | } PMSMBus; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-20 15:26:08 -05:00
										 |  |  | void pm_smbus_init(DeviceState *parent, PMSMBus *smb, bool force_aux_blk); | 
					
						
							| 
									
										
										
										
											2010-05-14 16:28:59 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-22 12:28:23 -06:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * For backwards compatibility on migration, older versions don't have | 
					
						
							|  |  |  |  * working migration for pm_smbus, this lets us ignore the migrations | 
					
						
							|  |  |  |  * for older machine versions. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | bool pm_smbus_vmstate_needed(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern const VMStateDescription pmsmb_vmstate; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-29 15:29:06 +02:00
										 |  |  | #endif /* PM_SMBUS_H */
 |