isci: Removed special macros that does 64bit address math
These macros are not necessary. We can do 64bit math directly. Signed-off-by: Dave Jiang <dave.jiang@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
@@ -85,45 +85,6 @@
|
|||||||
#define sci_cb_make_physical_address(physical_addr, addr_upper, addr_lower) \
|
#define sci_cb_make_physical_address(physical_addr, addr_upper, addr_lower) \
|
||||||
((physical_addr) = (addr_lower) | ((u64)addr_upper) << 32)
|
((physical_addr) = (addr_lower) | ((u64)addr_upper) << 32)
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sci_physical_address_add() -
|
|
||||||
*
|
|
||||||
* This macro simply performs addition on an dma_addr_t type. The
|
|
||||||
* lower u32 value is "clipped" or "wrapped" back through 0. When this occurs
|
|
||||||
* the upper 32-bits are incremented by 1.
|
|
||||||
*/
|
|
||||||
#define sci_physical_address_add(physical_address, value) \
|
|
||||||
{ \
|
|
||||||
u32 lower = lower_32_bits((physical_address)); \
|
|
||||||
u32 upper = upper_32_bits((physical_address)); \
|
|
||||||
\
|
|
||||||
if (lower + (value) < lower) \
|
|
||||||
upper += 1; \
|
|
||||||
\
|
|
||||||
lower += (value); \
|
|
||||||
sci_cb_make_physical_address(physical_address, upper, lower); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sci_physical_address_subtract() -
|
|
||||||
*
|
|
||||||
* This macro simply performs subtraction on an dma_addr_t type. The
|
|
||||||
* lower u32 value is "clipped" or "wrapped" back through 0. When this occurs
|
|
||||||
* the upper 32-bits are decremented by 1.
|
|
||||||
*/
|
|
||||||
#define sci_physical_address_subtract(physical_address, value) \
|
|
||||||
{ \
|
|
||||||
u32 lower = lower_32_bits((physical_address)); \
|
|
||||||
u32 upper = upper_32_bits((physical_address)); \
|
|
||||||
\
|
|
||||||
if (lower - (value) > lower) \
|
|
||||||
upper -= 1; \
|
|
||||||
\
|
|
||||||
lower -= (value); \
|
|
||||||
sci_cb_make_physical_address(physical_address, upper, lower); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* scic_word_copy_with_swap() - Copy the data from source to destination and
|
* scic_word_copy_with_swap() - Copy the data from source to destination and
|
||||||
* swap the bytes during the copy.
|
* swap the bytes during the copy.
|
||||||
|
@@ -109,7 +109,7 @@ void scic_sds_unsolicited_frame_control_set_address_table_count(
|
|||||||
static void scic_sds_unsolicited_frame_control_construct_frames(
|
static void scic_sds_unsolicited_frame_control_construct_frames(
|
||||||
struct scic_sds_unsolicited_frame_control *uf_control,
|
struct scic_sds_unsolicited_frame_control *uf_control,
|
||||||
dma_addr_t uf_buffer_phys_address,
|
dma_addr_t uf_buffer_phys_address,
|
||||||
unsigned long uf_buffer_virt_address,
|
void *uf_buffer_virt_address,
|
||||||
u32 unused_uf_header_entries,
|
u32 unused_uf_header_entries,
|
||||||
u32 used_uf_header_entries)
|
u32 used_uf_header_entries)
|
||||||
{
|
{
|
||||||
@@ -118,7 +118,8 @@ static void scic_sds_unsolicited_frame_control_construct_frames(
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Program the unused buffers into the UF address table and the
|
* Program the unused buffers into the UF address table and the
|
||||||
* controller's array of UFs. */
|
* controller's array of UFs.
|
||||||
|
*/
|
||||||
for (index = 0; index < unused_uf_header_entries; index++) {
|
for (index = 0; index < unused_uf_header_entries; index++) {
|
||||||
uf = &uf_control->buffers.array[index];
|
uf = &uf_control->buffers.array[index];
|
||||||
|
|
||||||
@@ -132,7 +133,8 @@ static void scic_sds_unsolicited_frame_control_construct_frames(
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Program the actual used UF buffers into the UF address table and
|
* Program the actual used UF buffers into the UF address table and
|
||||||
* the controller's array of UFs. */
|
* the controller's array of UFs.
|
||||||
|
*/
|
||||||
for (index = unused_uf_header_entries;
|
for (index = unused_uf_header_entries;
|
||||||
index < unused_uf_header_entries + used_uf_header_entries;
|
index < unused_uf_header_entries + used_uf_header_entries;
|
||||||
index++) {
|
index++) {
|
||||||
@@ -140,17 +142,17 @@ static void scic_sds_unsolicited_frame_control_construct_frames(
|
|||||||
|
|
||||||
uf_control->address_table.array[index] = uf_buffer_phys_address;
|
uf_control->address_table.array[index] = uf_buffer_phys_address;
|
||||||
|
|
||||||
uf->buffer = (void *)uf_buffer_virt_address;
|
uf->buffer = uf_buffer_virt_address;
|
||||||
uf->header = &uf_control->headers.array[index];
|
uf->header = &uf_control->headers.array[index];
|
||||||
uf->state = UNSOLICITED_FRAME_EMPTY;
|
uf->state = UNSOLICITED_FRAME_EMPTY;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Increment the address of the physical and virtual memory pointers
|
* Increment the address of the physical and virtual memory
|
||||||
* Everything is aligned on 1k boundary with an increment of 1k */
|
* pointers. Everything is aligned on 1k boundary with an
|
||||||
|
* increment of 1k.
|
||||||
|
*/
|
||||||
uf_buffer_virt_address += SCU_UNSOLICITED_FRAME_BUFFER_SIZE;
|
uf_buffer_virt_address += SCU_UNSOLICITED_FRAME_BUFFER_SIZE;
|
||||||
sci_physical_address_add(
|
uf_buffer_phys_address += SCU_UNSOLICITED_FRAME_BUFFER_SIZE;
|
||||||
uf_buffer_phys_address, SCU_UNSOLICITED_FRAME_BUFFER_SIZE
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,6 +179,7 @@ void scic_sds_unsolicited_frame_control_construct(
|
|||||||
u32 unused_uf_header_bytes;
|
u32 unused_uf_header_bytes;
|
||||||
u32 used_uf_header_bytes;
|
u32 used_uf_header_bytes;
|
||||||
dma_addr_t uf_buffer_phys_address;
|
dma_addr_t uf_buffer_phys_address;
|
||||||
|
void *uf_buffer_virt_address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prepare all of the memory sizes for the UF headers, UF address
|
* Prepare all of the memory sizes for the UF headers, UF address
|
||||||
@@ -194,8 +197,10 @@ void scic_sds_unsolicited_frame_control_construct(
|
|||||||
/*
|
/*
|
||||||
* The Unsolicited Frame buffers are set at the start of the UF
|
* The Unsolicited Frame buffers are set at the start of the UF
|
||||||
* memory descriptor entry. The headers and address table will be
|
* memory descriptor entry. The headers and address table will be
|
||||||
* placed after the buffers. */
|
* placed after the buffers.
|
||||||
|
*/
|
||||||
uf_buffer_phys_address = mde->physical_address;
|
uf_buffer_phys_address = mde->physical_address;
|
||||||
|
uf_buffer_virt_address = mde->virtual_address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Program the location of the UF header table into the SCU.
|
* Program the location of the UF header table into the SCU.
|
||||||
@@ -205,34 +210,34 @@ void scic_sds_unsolicited_frame_control_construct(
|
|||||||
* - Program unused header entries to overlap with the last
|
* - Program unused header entries to overlap with the last
|
||||||
* unsolicited frame. The silicon will never DMA to these unused
|
* unsolicited frame. The silicon will never DMA to these unused
|
||||||
* headers, since we program the UF address table pointers to
|
* headers, since we program the UF address table pointers to
|
||||||
* NULL. */
|
* NULL.
|
||||||
uf_control->headers.physical_address = uf_buffer_phys_address;
|
*/
|
||||||
sci_physical_address_add(
|
uf_control->headers.physical_address =
|
||||||
uf_control->headers.physical_address, used_uf_buffer_bytes);
|
uf_buffer_phys_address +
|
||||||
sci_physical_address_subtract(
|
used_uf_buffer_bytes -
|
||||||
uf_control->headers.physical_address, unused_uf_header_bytes);
|
unused_uf_header_bytes;
|
||||||
uf_control->headers.array
|
|
||||||
= (struct scu_unsolicited_frame_header *)
|
uf_control->headers.array =
|
||||||
scic_cb_get_virtual_address(
|
uf_buffer_virt_address +
|
||||||
controller, uf_control->headers.physical_address
|
used_uf_buffer_bytes -
|
||||||
);
|
unused_uf_header_bytes;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Program the location of the UF address table into the SCU.
|
* Program the location of the UF address table into the SCU.
|
||||||
* Notes:
|
* Notes:
|
||||||
* - The address must align on a 64-bit boundary. Guaranteed to be on 64
|
* - The address must align on a 64-bit boundary. Guaranteed to be on 64
|
||||||
* byte boundary already due to above programming headers being on a
|
* byte boundary already due to above programming headers being on a
|
||||||
* 64-bit boundary and headers are on a 64-bytes in size. */
|
* 64-bit boundary and headers are on a 64-bytes in size.
|
||||||
uf_control->address_table.physical_address = uf_buffer_phys_address;
|
*/
|
||||||
sci_physical_address_add(
|
uf_control->address_table.physical_address =
|
||||||
uf_control->address_table.physical_address, used_uf_buffer_bytes);
|
uf_buffer_phys_address +
|
||||||
sci_physical_address_add(
|
used_uf_buffer_bytes +
|
||||||
uf_control->address_table.physical_address, used_uf_header_bytes);
|
used_uf_header_bytes;
|
||||||
uf_control->address_table.array
|
|
||||||
= (dma_addr_t *)
|
uf_control->address_table.array =
|
||||||
scic_cb_get_virtual_address(
|
uf_buffer_virt_address +
|
||||||
controller, uf_control->address_table.physical_address
|
used_uf_buffer_bytes +
|
||||||
);
|
used_uf_header_bytes;
|
||||||
|
|
||||||
uf_control->get = 0;
|
uf_control->get = 0;
|
||||||
|
|
||||||
@@ -250,7 +255,7 @@ void scic_sds_unsolicited_frame_control_construct(
|
|||||||
scic_sds_unsolicited_frame_control_construct_frames(
|
scic_sds_unsolicited_frame_control_construct_frames(
|
||||||
uf_control,
|
uf_control,
|
||||||
uf_buffer_phys_address,
|
uf_buffer_phys_address,
|
||||||
(unsigned long)mde->virtual_address,
|
mde->virtual_address,
|
||||||
unused_uf_header_entries,
|
unused_uf_header_entries,
|
||||||
used_uf_header_entries
|
used_uf_header_entries
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user