How to read whole data sent to USART with interrupt?
The conventional method for dealing with multi-byte receives in an interrupt routine is to setup a circular queue. As each byte is received it is placed into the next available slot in the queue. This would replace your single byte save code that you have now.

The output side of the circular queue is polled for available content by your mainline code that wants to use the received data. When you start dealing with multi byte streams on a serial interface it is often desirable to make a "protocol" that allows the receiver end to be able to track where the starting of each batch of data starts. There are many ways to do this. One way it to select a unique byte value for the start of the batch. Another way is to set the MSB of the first byte of the batch and then follow with all of the rest of the bytes in the batch with the MSB cleared. 

** Some comments about your ISR **


It is generally a bad practice to place polling loops inside an interrupt service routine. You want to keep the ISR execution time as short as possible. I do not know what the intention of the polling loop is but you should study about removing that. 
It is usually not necessary to be putting interrupt disable and re-enable inside an ISR. Most MCUs will automatically disable the interrupts when the ISR is entered and then restore the previous state when the return from interrupt is executed.
It is not clear what the pin state logic is doing inside the ISR. That does not look at all applicable to servicing a USART interrupt.