esp: introduce esp_get_tc() and esp_set_tc()
These functions simplify reading and writing the TC register value without having to manually shift each individual 8-bit value. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20210304221103.6369-10-mark.cave-ayland@ilande.co.uk>
This commit is contained in:
		
							parent
							
								
									4ca2ba6fb0
								
							
						
					
					
						commit
						c47b5835f5
					
				| @ -98,6 +98,24 @@ void esp_request_cancelled(SCSIRequest *req) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static uint32_t esp_get_tc(ESPState *s) | ||||
| { | ||||
|     uint32_t dmalen; | ||||
| 
 | ||||
|     dmalen = s->rregs[ESP_TCLO]; | ||||
|     dmalen |= s->rregs[ESP_TCMID] << 8; | ||||
|     dmalen |= s->rregs[ESP_TCHI] << 16; | ||||
| 
 | ||||
|     return dmalen; | ||||
| } | ||||
| 
 | ||||
| static void esp_set_tc(ESPState *s, uint32_t dmalen) | ||||
| { | ||||
|     s->rregs[ESP_TCLO] = dmalen; | ||||
|     s->rregs[ESP_TCMID] = dmalen >> 8; | ||||
|     s->rregs[ESP_TCHI] = dmalen >> 16; | ||||
| } | ||||
| 
 | ||||
| static void set_pdma(ESPState *s, enum pdma_origin_id origin, | ||||
|                      uint32_t index, uint32_t len) | ||||
| { | ||||
| @ -157,9 +175,7 @@ static uint32_t get_cmd(ESPState *s, uint8_t *buf, uint8_t buflen) | ||||
| 
 | ||||
|     target = s->wregs[ESP_WBUSID] & BUSID_DID; | ||||
|     if (s->dma) { | ||||
|         dmalen = s->rregs[ESP_TCLO]; | ||||
|         dmalen |= s->rregs[ESP_TCMID] << 8; | ||||
|         dmalen |= s->rregs[ESP_TCHI] << 16; | ||||
|         dmalen = esp_get_tc(s); | ||||
|         if (dmalen > buflen) { | ||||
|             return 0; | ||||
|         } | ||||
| @ -348,9 +364,7 @@ static void esp_dma_done(ESPState *s) | ||||
|     s->rregs[ESP_RINTR] = INTR_BS; | ||||
|     s->rregs[ESP_RSEQ] = 0; | ||||
|     s->rregs[ESP_RFLAGS] = 0; | ||||
|     s->rregs[ESP_TCLO] = 0; | ||||
|     s->rregs[ESP_TCMID] = 0; | ||||
|     s->rregs[ESP_TCHI] = 0; | ||||
|     esp_set_tc(s, 0); | ||||
|     esp_raise_irq(s); | ||||
| } | ||||
| 
 | ||||
| @ -535,9 +549,7 @@ static void handle_ti(ESPState *s) | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     dmalen = s->rregs[ESP_TCLO]; | ||||
|     dmalen |= s->rregs[ESP_TCMID] << 8; | ||||
|     dmalen |= s->rregs[ESP_TCHI] << 16; | ||||
|     dmalen = esp_get_tc(s); | ||||
|     if (dmalen == 0) { | ||||
|         dmalen = 0x10000; | ||||
|     } | ||||
| @ -888,9 +900,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr addr, | ||||
| 
 | ||||
|     trace_esp_pdma_write(size); | ||||
| 
 | ||||
|     dmalen = s->rregs[ESP_TCLO]; | ||||
|     dmalen |= s->rregs[ESP_TCMID] << 8; | ||||
|     dmalen |= s->rregs[ESP_TCHI] << 16; | ||||
|     dmalen = esp_get_tc(s); | ||||
|     if (dmalen == 0 || s->pdma_len == 0) { | ||||
|         return; | ||||
|     } | ||||
| @ -907,9 +917,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr addr, | ||||
|         dmalen -= 2; | ||||
|         break; | ||||
|     } | ||||
|     s->rregs[ESP_TCLO] = dmalen & 0xff; | ||||
|     s->rregs[ESP_TCMID] = dmalen >> 8; | ||||
|     s->rregs[ESP_TCHI] = dmalen >> 16; | ||||
|     esp_set_tc(s, dmalen); | ||||
|     if (s->pdma_len == 0 && s->pdma_cb) { | ||||
|         esp_lower_drq(s); | ||||
|         s->pdma_cb(s); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Mark Cave-Ayland
						Mark Cave-Ayland